Git:分支管理

3

我希望将远程分支与HEAD同步,以便在最终合并时不会出现问题。因此,我想尝试将HEAD更改拉入我的分支中,以查看它们之间的差异。

如何在Git中完成以下工作流程?

  1. 检出一个远程分支。
  2. 一旦检出,将HEAD的更改拉入其中。
  3. 对分支进行一些编辑
  4. 将分支推送回相同分支的远程版本(不影响HEAD)。

有关实现相同目标的更好工作流的任何提示都将非常有用。

1个回答

4

这些都是比较基础的内容:

# make sure your notion of the remote is up to date
git fetch origin
# create and check out a branch, at the same place as the remote master branch
git checkout -b origin-master origin/master
# merge your local master
git merge master
# test, edit away, hack hack hack
git add ...
git commit ...
# push back to origin
git push origin origin-master:master

术语说明:
拉取(Pulling)是获取和合并的组合。当您操作本地分支时,无需获取,因此进行的是合并而不是拉取。
HEAD并不意味着您想象中的那样。(也许您是cvs/svn用户。)HEAD只是当前签出的提交(通常通过分支名称引用)。因此,您不是在合并HEAD,而是在合并该分支。这里称之为主干(master)。
至于关于执行相同操作的更好工作流程的问题...嗯,这个问题很难回答。您的目标有点模糊。您说“慢慢”同步并参考“最后合并它”,但是您概述的步骤一次就完成了所有合并... 没有什么可做的了。如果您想逐步执行操作,则可以重复我提供的步骤,每次选择历史记录中的中间提交进行合并。还有一点不太清楚,您希望在哪个方向上进行合并。也许您实际上想从您的分支开始,然后将远程内容合并到其中?
 git checkout -b master-merging master
 git fetch origin
 git merge origin/master
 # test, hack, commit, push...
 git push origin master-merging:master

或者使用增量合并:

 git checkout -b master-merging master
 git fetch origin
 git merge origin/master~20    # 20 commits before origin/master
 # test, hack, commit
 git merge origin/master~10    # 10 commits before origin/master
 # test, hack, commit
 git merge origin/master
 # test, hack, commit, push...

嗯,这非常有用,但我不确定“分支”在哪里?似乎你所做的一切都在主分支上? - jayunit100
通常我的分支名称类似于 "new-gui-experiment"。为什么要使用如此通用的术语来命名分支? - jayunit100
因为我不知道你的分支叫什么,而且所有的存储库都倾向于有一个主分支,所以我选择了最低公共分母,并假设你正在尝试将本地的主分支与远程主分支协调一致。对于泛泛的问题,给出泛泛的答案。(而从远程复制分支的最简单方式无疑是[remote-name]-[branch-name],对吧?) - Cascabel
是的,我明白了。我想我对于“origin”和“master”这些术语是否与Git中的任何默认值或约定相关感到困惑,因为它们太过通用。 - jayunit100
我怎么知道我确实有一个“本地主”?我从未创建过这样的东西。它是默认存在的吗? - jayunit100
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接