git push 命令用于将本地分支的更新,推送到远程主机。它的格式与 git pull 命令相仿。
git push <远程主机名> <本地分支名>:<远程分支名>
如果省略远程分支名,则表示将本地分支推送与之存在“追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
git push origin master
上面命令表示,将本地的 master 分支推送到 origin 主机的 master 分支。如果后者不存在,则会被新建。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。
git push origin :master
等同于
git push origin --delete master
上面命令表示删除 origin 主机的 master 分支。
如果当前分支与远程分支之间存在追踪关系,则本地分支和远程分支都可以省略。
git push origin
上面命令表示,将当前分支推送到 origin 主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。
git push
如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用 git push 。
git push -u origin master
上面的命令将本地 master 分支推送到 origin 主机,同时指定 origin 为默认主机,后面就可以不加任何参数使用 git push 了。
不带任何参数的 git push ,默认只推送当前分支,这叫做 simple 方式。此外,还有一种 matching 方式,会推送所有有对应的远程分支的本地分支。
git 2.0 版本之前,默认采用 matching 方式,现在改为默认采用 simple 方式,如果要修改这个设置,可以采用 git config
命令。
git config --global push.default matching
或者
git config --global push.default simple
还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用 -all
选项。
git push --all origin
上面命令表示,将所有本地分支都推送到 origin
主机。
如果远程主机的版本比本地版本更新,推送时 git 会报错,要求先在本地做 git pull 合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用 -force 选项。
git push --force origin
上面命令使用-force选项,结果导致在远程主机产生一个“非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用 -force 选项。
最后,git push 不会推送标签(tag),除非使用 -tags 选项。
git push origin --tags
git log
命令可以查看历史记录,git log
命令显示从最近到最远的提交日志;
如果嫌输出信息太多,看得眼花缭乱的,可以试试 git log --pretty=oneline
。我们可以看到当前版本以及之前的版本日志以及版本号。
用 git log --graph
命令可以看到分支合并图。
或者两个参数一起用:
git log --graph --pretty=oneline
git log --graph --pretty=oneline --abbrev-commit
首先,git 必须知道当前版本是哪个版本,在 git 中,用 HEAD 表示当前版本,上一个版本就是 HEAD^
,上上一个版本就是 HEAD^^
, 当然往上100个版本写100个 ^
比较容易数不过来,所以写成 HEAD~100
。
现在,我们要把当前版本回退到上一个版本,就可以使用 git reset
命令:
git reset --hard HEAD^
当你回退到了某个版本后,git log
只能显示此版本及之前的版本的日志,之后的版本日志就看不到了,但是,我们想恢复到之后教新的版本怎么办?
Git 提供了一个命令 git reflog
用来记录你的每一次命令。
查看标签(用来标记标志性的稳定版本信息)
发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。
相比于 commit 的版本号(40位16进制),标签号则要好使的多。
所以,tag 就是一个让人容易记住的有意义的名字,它跟某个 commit 绑定在一起。
git tag [tag name]