对一直以来使用的Git命令进行一下梳理总结,方便以后使用的时候查找;
Git特点
1、分布式VC;
2、客户端都具有代码仓库的完整镜像,每一次提取操作,都是对代码仓库的完整备份;
3、近乎所有的操作都是在本地执行;
几个最常用的
1 | git config --list // 查看git 配置列表(类似于windows下面的set命令); |
三种状态切换
a.工作区
b.暂存区
c.版本库
a->b
1 | git add xxx // xxx为具体的文件(夹)路径 |
b->a
1 | git reset HEAD <file> // <file>可以是文件或者文件夹路径 |
b->c
1 | git commit -m "" // 把处于暂存区的文件提交到版本库, xxx 为提交说明 |
c->b
1 | git reset commit_id // 如果想把最近一次的提交移除, 该commit_id 是上一次提交的commit_id。 代码提交不会撤销,可以使用 git commit 重新提交 |
别名Alias
我们可以用git造一些更简单的命令,也更容易理解。
1 | git config --global alias.别名 '指定代码' |
比如:上面我们想把提交日志列表一行显示,命令太长,不好记, 我们可以直接起个别名 log21
git config --global alias.log2 'log --pretty=oneline'
以后我们想单行显示log列表时可以使用 git log2
就能达到效果。
我们可以通过git config --list
在配置列表中查看自己设置的命令别名;
再举一个例子:
取消暂存文件;git config --global alias.unstage 'reset HEAD --'
我们就可以直接使用 git unstage a.txt
就可以把a.txt
再回退到 工作区了。
在磁盘用户目录下,有一个从.gitconfig
文件,里面的内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14[user]
name = ******
email = ******
[core]
autocrlf = false
pager = less
[filter "lfs"]
clean = git-lfs clean -- %f
smudge = git-lfs smudge -- %f
process = git-lfs filter-process
required = true
[alias]
log2 = log --pretty=oneline
unstage = reset HEAD --
git pull & git fetch
前者 <==> 后者 + git merge origin/master
后者只取,不合并。
.gitignore忽略文件
我们可以通过cat .gitignore
来列出要忽略的文件模式;
文件.gitignore 格式规范如下:
1、所有空行或者以#开头的行都会被Git忽略;
2、可以使用标准的glob模式匹配;
3、匹配模式最后跟反斜杠(/) 说明要忽略的是目录;
4、要忽略指定模式以外的文件或目录,可以在模式前加上感叹号取反;
1 | *.wpy // 忽略说有以.wpy 结尾的文件 |
解决.gitignore 文件忽略不起作用
使用下面方式:1
2
3
4git rm -f --cached -r .idea # 把.idea 文件夹从git追踪中排除;
#也可以使用 git rm -r --cached . 删除本地缓存,让文件改为未track
git add .
git commit -m 'modify .gitignore'
看一下执行效果:1
2
3
4
5
6
7
8
9F:platform-xxx>git rm -f --cached -r .idea
rm '.idea/caches/build_file_checksums.ser'
rm '.idea//ProjcodeStylesect.xml'
rm '.idea/dbnavigator.xml'
rm '.idea/gradle.xml'
rm '.idea/misc.xml'
rm '.idea/runConfigurations.xml'
rm '.idea/sonarlint/issuestore/0/2/02e99b96f9ad605bf6cff133c88f60a9008cebd9'
rm '.idea/sonarlint/issuestore/0/4/04cc233f9221dea906f58e66f4fa36f1d447f25c'
git 合并多个commit
1 | git rebase -i HEAD~3 // 合并最近的三个commit |
假设最近三次的提交是c1,c2,c3 如下:
1 | pick 0d642a5 c1 |
如果我们想把后面两次commit融入c1提交, 我们就对c2,c3 的提交进行修改,pick修改为 squash或者 直接为s, 然后保存。调整一下commit日志再保存就可以了。贼方便;
其它
关于分支模型, 标签管理等高级功能后续会继续补充…
参考:
1、https://git-scm.com/book/en/v2
2、https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000