重要的Git操作(持续更新)
列一些我自己之前很少用到,但其实应该很常用和重要的 git 命令。
git diff
工作目录中当前文件和暂存区域(staged)快照之间的差异。
git diff cached (git diff staged)
已经暂存起来的文件和上次提交时的快照之间的差异
git rm
从暂存区删除某个文件,即不再跟踪此文件的变化,同时从工作目录中删除该文件。如果仅仅手动在工作目录中删除某个文件,运行 git status
显示的状态将会是 Changed but not updated
。
如果要删除的文件已经放入暂存区,必须加 -f
选项,即强制删除。
git rm —cached
与 git rm
不同,增加 --cached
选项之后,仅仅是把文件从 Git 仓库中删除,但在工作目录中仍然保留。使用场景是,有一些不希望跟踪的文件不小心纳入了仓库(git add
),可以这话来删除,然后再在 .gitignore
文件中补上。
git mv old_file new_file
Git 不会跟踪文件的移动操作,git mv
实际上是用来改名的。这个操作隐含了三个操作步骤,即 mv old_file new_file
,git rm old_file
,git add new_file
。
git log (-p -2)
如果不带任何参数,git log
的效果是按提交时间列出所有的更新的简要内容,最近的更新排在最前面。
使用 -p
参数,即 git log -p
则是展开显示每次提交的内容差异,包括修改的每一行内容。
使用 -数字
参数,比如 git log -p -2
,即仅显示最近两次更新。
git log —stat
仅显示简要的增改行数统计。
git log --pretty=oneline
在每一个提交放在一行内显示出来。
git log --since=<time>
比如 git log --since=2.weeks
会列出两周内的所有修改,还可以是某个时期以来的所有修改,比如 git log --since=2017-07-10
,会列出 2017年7月10日以来的所有修改。
类似的选项参数还有 --after
,--until
,--before
等。
git commit --amend
修改最后一次的提交。使用场景是,刚刚提交完一次 commit
完,发现有几个文件忘记加了,或者提交信息写错了,就可以重新 git add
,然后git commit --amend
,最终得到的是一个 commit
,之前那个 commit
相当于被修正。
git reset HEAD --<file>
取消已经暂存的某个文件。
git reset --hard HEAD~1
删除上一次 commit。
git checkout --<file>
取消某个文件的修改。
git config --global alias
修改别名,相当于自定义快捷键的意思。比如 git config --global alias.co checkout
,设置之后,打 git co
的效果就相当于 git checkout
了。甚至可以创造出新的命令,比如 git config --global alias.unstaged 'reset HEAD--'
,设置之后,打 git unstaged README.md
就相当于 git reset HAED --READ.md
。
git push [远程名]:[远程分支]
删除远程的分支。比如 git push origin :debug
,效果就是将远程 origin
的分支 debug
删除。将本地分支推到远程时,命令是 git push [远程名] [本地分支]
,其实完整的命令是 git push [远程名] [本地分支]:[远程分支]
。当忽略 [本地分支]
时,效果就是把 [远程分支]
删除。