重要的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_filegit rm old_filegit 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 [远程名] [本地分支]:[远程分支]。当忽略 [本地分支] 时,效果就是把 [远程分支] 删除。

· git, cheatsheet