-
git branch bugWork master^^2^在master的上一级节点的第二个父节点的上一个节点建立一个branch分支
git branch -f three C2将分支
three强制移动到C2节点上 -
相对引用
-
^,^^... -
~,~<num>...
-
-
Git Cherry-pick
git cherry-pick <提交号> #git cherry-pick C2 C4
-
交互式的 rebase
--interactive简写为-igit rebase -i HEAD~4 -
rebase
git rebase caption master #将master合并到caption分支下。 #即root->caption->bugfix
-
git commit --amend创建'',保留当前的提交的id,而不是创建新的id
-
TAG
git tag v1 C1 #如果不指定C1 那么Git 会使用HEAD指向的位置 -
Git Describe
描述离你最近的锚点(也就是标签)
git describe <ref>-
如果你没有指定的话,Git会以你目前所检出的位置(
HEAD)。输出结果是
<tag>_<numCommits>_g<hash>tag表示的是离ref最近的标签,numCommits是表示这个ref与tag相差有多少个提交记录,hash表示的是你所给定的ref所表示的提交记录哈希值的前几位。 -
当
ref提交记录上有某个标签时,则只输出标签名称
-
-
Git Fetch
不会更新你的
master分支,也不会修改你磁盘上的文件,只是下载提交记录(这样,你就可以对远程分支进行检查或者合并了)可以将
git fetch的理解为单纯的下载操作git fetch origin fooGit 会到远程仓库的foo分支上,然后获取所有本地不存在的提交,放到本地的o/foo上。git fetch origin foo:barGit 将foo解析成一个origin仓库的位置,然后将那些提交记录下载到了本地的bar分支上。由于指定了目标分支,其他的分支都不会被更新。 -
Git Pull
先抓取再合并到本地分支 ,可以理解为
git fetch组合git mergegit pull就是fetch和merge的简写,git pull唯一关注的是提交最终合并到哪里(也就是为git fetch所提供的destination参数)git pull origin foo相当于git fetch origin foo; git merge o/foo
-
Git Push
git push不带任何参数时的行为与Git 的一个名为push.default的配置有关。git pull --rebase就是fetch和rebase的简写git push <remote> <place>可以为push指定参数git push origin master把这个命令翻译过来就是:切到本地仓库中的master分支,获取所有的提交,再到远程仓库origin中找到master分支,将远程仓库中没有的提交记录都添加上去,搞定之后告诉我。我们通过
place参数来告诉Git提交记录来自于master,要推送到远程仓库中的master。它实际就是要同步两个仓库的位置。git push origin <source>:<destination>推送到指定<destination>的目标位置。<source>和<destiantion>都支持相对引用,如果<destiantion>不存在,则会origin创建新的branch
-
远程追踪分支
-
pull 操作时,提交记录会被先下载到
o/master上,之后再合并到本地master分支。隐含的合并目标由这个关联确定的。 -
push 操作时,我们把工作从
master推到远程仓库中的master分支(同时会更新远程分支o/master)。这个推送的目的地也就是由这种关联确定的。 -
有两种方式设置分支跟踪
-
git checkout -b foo o/master创建一个名叫foo的分支,它跟踪远程分支o/master -
git branch -u o/master foo,如果当前就在foo分支上,还可以省略foo
-
-
为什么不用merge呢?
rebase的优缺点
-
优点:
Rebase 使你的提交树变得很干净,所有的提交都在一条线上 -
缺点:
Rebase 修改了提交树的历史
一些开发人员喜欢保留提交历史,因此更偏爱merge。而其他人可能更喜欢干净的提交树,于是偏爱rebase。仁者见仁,智者见智。
古怪的<source>
Git 有两种关于<source>的用法是比较诡异的,即你可以在 git psuh或git fetch 时不指定任何source,方法就是仅保留冒号和destination部分,source部分留空。
git push origin :sidegit fetch origin :bugFix
如果push空<source>到远程仓库,它会删除远程仓库中的分支。
如果fetch空<source>到本地,会在本地创建一个新的分支。











网友评论