0

我的本地 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 个提交同步到我的本地存储库?

4

1 回答 1

3

1)你的假设是正确的。commit5 和 6 将与git push remote branch-feature1. 您可以使用(过去是默认设置)推送所有跟踪分支git push remote :,但这很危险,我将解释原因。

想象一下:当几个新的提交出现在 master. 您决定需要修改提交,这将要求您使用git push -f. 现在,过去默认情况下 git 会推送所有跟踪分支,所以这意味着如果您没有使用最新更新快进任何其他分支,那么您最终会将 master 回滚到本地的任何版本主人在!这显然是一个糟糕的情况,因此更改了默认设置以减少对人们的危险。

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

2) 是的,所有的提交都将在本地带回,branch-feature1并且refs/remotes/<remote>/branch-feature1对于branch-feature2. 也就是说,只要您没有更改用于获取的 refspec,或设置推送 refspec。有时更改默认值很有用。例如,在从事开源项目时,我通常将我的 fork 放在. origin,而真正的项目放在upstream. 我经常只master从 with 中获取分支upstream

[remote.upstream.fetch]
    fetch = +refs/heads/master:refs/heads/upstream/master
于 2013-08-17T09:35:35.217 回答