我在本地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次提交同步到我的本地存储库?
答案 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-feature1
,branch-feature2
变为origin
。也就是说,只要您没有更改用于获取的refspec,或设置push refspec。从默认值中更改内容偶尔会有用。例如,在处理开源项目时,我的叉子通常位于upstream
,而真正的项目位于master
。我经常只使用upstream
中的[remote.upstream.fetch]
fetch = +refs/heads/master:refs/heads/upstream/master
分支:
{{1}}