Git常用命令总结
2017-05-28 09:03
225 查看
1、add和commit命令
2、diff和show命令
3、log命令
4、Working Directory和Repository
5、reset和revert命令
5、remove命令
6、push命令
7、clone命令
8、branch和merge命令
9、更多Git命使用方法:
https://github.com/xhacker/GitProTips/blob/master/zh_CN.md#
git init //初始化一个 Git 仓库(repository),即把当前所在目录变成 Git 可以管理的仓库。 git add 文件 //把文件添加到 暂存区(stage),可被 track 追踪纪录下来。可多次使用来添加多个文件。 git add * //添加所有修改到暂存区,效果同 git add all,待验证。 git add -A //暂存所有的文件,包括新增加的、修改的和删除的文件。 git add . //暂存新增加的和修改的文件,不包括已删除的文件。即当前目录下所有文件。 git add -u //暂存修改的和删除的文件,不包括新增加的文件。 git add -i //交互式添加文件到暂存区。 git add -p //暂存文件的一部分。 git commit -m "本次提交说明" //一次性把暂存区所有文件修改提交到仓库的当前分支。注意:提交信息可为中文也可为英文,若为英文则通常用一般现在时。如果不加参数 -m 则会跳转到编辑器强制填写提交说明信息。 //commit命令 git commit -am "本次提交说明" //使用该命令,Git 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 git add 步骤,参数 -am 也可写成 -a -m。 git commit --amend //重新提交,最终只会有一个提交,第二次提交将代替第一次提交的结果。尤其适用于提交完了才发现漏掉了几个文件没有添加,或者提交信息写错了的情况。 git commit -p //commit 文件的一部分,适合工作量比较大的情况。之后,Git 会对每块修改弹出一个提示,询问你是否 stage,按 y/n 来选择是否 commit 这块修改,? 可以查看其他操作的说明。
2、diff和show命令
git status //显示当前仓库的最新状态。提交之后,工作区就是“干净的”,即没有新的修改;有未提交文件时,最上面显示的是在 staging area,即将被 commit 的文件;中间显示没有 stage 的修改了的文件,最下面是新的还没有被 Git track 的文件。 git status -s 或 git status --short //状态简览。输入此命令后,有如下几种情况(总共5种情况):新添加的未跟踪文件前面有 ?? 标记,新添加到暂你可能注意到了 M 有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。 git diff //查看工作区中的修改。 git diff --staged 或 git diff --cached //查看暂存区中的修改。 git diff <commit id1> <commit id2> //比较两次 commit 之间的差异。 git diff <branch1> <branch2> //在两个 branch 之间比较。 git diff 文件 //查看指定文件具体修改了哪些内容。 git diff HEAD -- 文件 //查看版本库最新版本和工作区之间的区别,貌似没什么卵用。 git difftool --tool-help //查看系统支持哪些 Git Diff 插件,貌似没什么卵用。 git show //查看最后一个 commit 的修改。 git show HEAD~3 //查看倒数第四个 commit 的修改,HEAD~3 就是向前数三个的 commit,即倒数第四个 commit。 git show deadbeef //查看 hash 为 deadbeef 的 commit 的修改。 git blame 文件 //查看谁什么时间改了哪些文件。
3、log命令
git log //显示从最近到最远的提交日志,包括每个提交的 SHA-1 校验和、作者的名字和电子邮件地址、提交时间以及提交说明等基本信息。 git log -p -2 //除显示基本信息之外,还显示每次提交的内容差异,-2 意思是仅显示最近两次提交。特别适用于进行代码审查,或者快速浏览某个搭档提交的 commit 所带来的变化。 git log --start //显示每次提交的简略的统计信息,貌似不太好用。 git log --graph //查看分支合并图。 git log --pretty=oneline //简化日志信息,将每个提交放在一行显示,查看的提交数很大时非常有用,也可带有 –graph 参数,效果同 git config format.pretty oneline。 git log --oneline --decorate --graph --all //查看分叉历史,包括:提交历史、各个分支的指向以及项目的分支分叉情况。 //恢复一个彻底删掉的 commit //见链接:https://github.com/xhacker/GitProTips/blob/master/zh_CN.md# //别人-push-了修改我无法-push-了怎么办,见链接:https://github.com/xhacker/GitProTips/blob/master/zh_CN.md#
4、Working Directory和Repository
//工作区(Working Directory):项目所在的文件目录。 //版本库(Repository):工作区有一个隐藏目录文件 .git(可通过命令 ls -ah 查看隐藏文件),这就是 Git 的版本库。版本库里主要有称为 stage 的暂存区、Git 自动创建的 master 分支,以及指向 master 的一个指针 HEAD,表示版本库的最新版本。
5、reset和revert命令
git checkout -- 文件 //丢弃工作区的修改,包括修改后还没有放到暂存区和添加到暂存区后又作了修改两种情况。总之,让该文件回到最近一次 git commit 或 git add 之后的状态。注意:没有 – ,就变成了切换分支的命令了。 git reset HEAD 文件 //把暂存区的修改撤销(unstage),回退到工作区。注意:在 Git 中任何已提交的东西几乎总是可以恢复的。甚至那些被删除的分支中的提交或使用 –amend 选项覆盖的提交也可以恢复。然而,任何未提交的东西丢失后很可能再也找不到了。 git reset --hard //重置所有文件到未修改的状态。 git reset <commit SHA> //重置到某个 commit。 git reset HEAD~1 //将当前 branch 重置为倒数第二个 commit(即丢弃最后一个 commit)。git reset 有三个参数可以选择,–soft、–mixed 和 –hard。 git reset --hard HEAD^ //回退到上一个版本。同理,回退到上上个版本为:HEAD^ ^, 回退到上100个版本为:HEAD-100,波浪号 ~ 也可以,变成倒数第101个。 git reset --hard <commit id> //回退到某一提交过的版本,如果已经 push,则回退的意义不大了。 git revert <commit id> //还原某个 commit。还原(revert)的实质是产生一个新的 commit,内容和要还原的 commit 完全相反。比如,A commit 在 main.c 中增加了三行,revert A 产生的 commit 就会删除这三行。如果我们非常确定之前的某个 commit 产生了 bug,最好的办法就是 revert 它。git revert 后 git 会提示写一些 commit message,此处最好简单描述为什么要还原;而重置(reset)会修改历史,常用于还没有 push 的本地 commits。 git revert HEAD //还原到上次 commit。
5、remove命令
git rm 文件 //把文件从版本库中删除,不会再追踪到。 git rm -f 文件 //强制删除版本库中有修改的文件。 git rm --cached 文件 //把文件从版本库中删除,但让文件保留在工作区且不被 Git 继续追踪(track),通常适用于在 rm 之后把文件添加到 .gitignore 中的情况。 git rm log/\*.log //删除 log/ 目录下扩展名为 .log 的所有文件。 git rm \*~ //删除以 ~ 结尾的所有文件。
6、push命令
git push //推送本地修改到 origin。 git push -u origin master //关联后,使用该命令第一次推送 master 分支的所有内容,后续再推送的时候就可以省略后面三个参数了,其中参数 u 代表上游(upstream)的意思。 git push origin 远程分支(通常是 master) //推送最新修改。注意:多人协作时,除了 merge 可能会发生冲突之外,推送时也有可能发生冲突。在他人推送之后是不能立即推送自己的修改的,想想也是,因为可能会覆盖他人的工作,所以必须先拉取(pull)别人的修改合并(merge)之后才能推送。如果不是第一次推送,后面的参数可省略。
7、clone命令
git clone git@github.com:username/<repo name>.git //从远程库(origin)克隆一份到本地,仓库名同远程仓库名。 git clone https://github.com/username/repo name.git //作用同上。但不建议使用 https 协议,原因有二:一是速度慢;二是每次推送必须输入口令,麻烦。但在某些只开放 http 端口的公司内部就无法使用原生的 ssh 协议而只能用 https,仓库名同远程仓库名。 git clone <repo url> <folder name> //克隆一个仓库到指定文件夹。 git clone <repo url> . //克隆一个仓库到当前文件夹(应该是空的)。
8、branch和merge命令
git branch //列出本地当前所有分支,方便查看。当前分支前面会标有一个 * 号。 git branch -r //查看远程分支列表。 git branch -a //显示所有分支,包括本地和远程。 git branch -v //查看每一次分支的最后一次提交。 git branch -vv //查看设置的所有跟踪分支。将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。 git branch --merged //查看所有已经被 merge 的 branch。 git branch --no-merged //查看所有还没被 merge 的 branch。 git branch --merged | xargs git branch -d //删除所有已经被 merge 的 branch。 git checkout -b 分支 //创建并切换到新的分支,相当于下面两条命令:git branch 分支 + git checkout 分支。 git checkout - //切换到上一个 branch。 git cherry-pick <commit id> //假如我们在某个 branch 做了一大堆 commit,而当前 branch 想应用其中的一个,可以使用该命令。 git merge 分支 //合并指定分支到当前所在的分支。 git branch -d 分支 //普通删除分支(相对强制删除而言)。一般情况下,先合并完分支,然后再删除,否则会删除失败,除非使用 -D 参数强制删除。注意:因为创建、合并和删除分支非常快,所以 Git 鼓励使用分支完成某个任务,合并后再删除分支,这个直接在 master 分支上工作效果是一样的,但过程更安全。 git branch -D 分支 //强行删除分支,尤其适用分支内容有了新的修改但还没有被合并的情况。 git push origin -delete 分支 //在本地和远程同步删除分支。 //merge 会把两个分支的最新快照以及二者最近的共同祖先进行三方合并,合并的结果是生成一个新的快照(并提交)。
9、更多Git命使用方法:
https://github.com/xhacker/GitProTips/blob/master/zh_CN.md#