git push / fetch - 将同步哪些提交?

时间:2013-08-17 08:14:20

标签: git

我在本地git存储库中有以下提交结构:

                              branch-feature1
                                 |
               |-> commit3 -> commit4
               |
 commit1 -> commit2
               |
               |-> commit5 -> commit6
                                 |
                              branch-feature2

1)我是否认为当我运行git push remote branch-feature1时,只有从commit1到commit4的提交才会同步到远程存储库,而commmit5和commit6将被省略?

2)现在假设我在远程存储库中具有相同的提交结构。我是否认为当我运行'git fetch remote'时,我会将所有6次提交同步到我的本地存储库?

1 个答案:

答案 0 :(得分:3)

1)您的假设是正确的。 commit5和6将被遗漏git push remote branch-feature1。您可以使用git push remote :(以前是默认值)推送所有跟踪分支,但这很危险,我会解释原因。

想象一下:你很高兴地在你的分支上玩耍,同时几个新的提交出现在主人身上。您决定需要修改提交,这将要求您强制推送git push -f。现在,它曾经是git会默认推送所有跟踪分支,所以这意味着如果你没有使用最新更新快进任何其他分支,那么你最终会将master回滚到你当地的任何版本大师在!这显然是一个糟糕的情况,所以默认情况发生了变化,使人们不那么危险。

可以设置与默认值不同的策略。查看git-config手册页中的push.default。另外,push默认使用fetch refspec,但你可以选择另一个。请参阅同一手册页中的remote.<name>.push

2)是的,所有提交都将在本地恢复,branch-feature1变为refs/remotes/<remote>/branch-feature1branch-feature2变为origin。也就是说,只要您没有更改用于获取的refspec,或设置push refspec。从默认值中更改内容偶尔会有用。例如,在处理开源项目时,我的叉子通常位于upstream,而真正的项目位于master。我经常只使用upstream中的[remote.upstream.fetch] fetch = +refs/heads/master:refs/heads/upstream/master 分支:

{{1}}