Git rebase:重新申请所有提交,为什么?

时间:2014-06-23 12:43:04

标签: git remote-branch

由于我们使用Git远程分支,因此我们遇到了这种情况。 让我简单解释一下:

  • 开发人员John创建了一个远程分支" post_video"
  • 我检查了这个远程分支也可以使用它

    git checkout feature/post_video
    
  • 我提交了我的更改(本地),并从远程服务器中取出了此远程分支上的更改:

    ... few changes ...
    git add myfile.html otherfile.js etc.
    git commit (+ message)
    git pull
    
  • 出现了第一个问题:当我拉动这个远程分支时,我遇到了很多冲突,但对于我永远不会改变的文件!

  • 第二个问题:修复这些冲突后,我想将这个远程分支合并到主分支中:

    git checkout master
    git pull                         => just to update master before merge
    git checkout feature/post_video
    git rebase master                => HERE CAME THE SECOND PROBLEM
    
  • 从这个rebase中,我遇到了很多冲突:对于在远程分支feature / post_video中推送的每一个提交,我必须解决"冲突"。

有谁能告诉我在这个工作流程中我做错了什么?

谢谢,

3 个答案:

答案 0 :(得分:3)

结帐远程分支会让您进入DETACHED HEAD mode

你应该在当地的一个分支机构工作。

git checkout -b post_video feature/post_video

然后,您可以在更新的(已提取的)feature/post_video之上进行提交甚至重新设置(只要您没有推送本地提交)(不在master之上,因为它会改变整个分支的历史,而不仅仅是你自己在该分支上的提交)


你应该看到,在ckeckout功能/ post_video:

Note: checking out 'feature/post_video'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

答案 1 :(得分:0)

我不确定在第一种情况下出了什么问题,但最大的问题可能是您正在重新设置共享提交。这几乎总是一场灾难。

当您重新提交提交时,更改其提交哈希。你拥有的提交和你朋友的提交,即使他们“做同样的事情”,也不再是相同的提交。在那之后,你的分支机构已经有效地分道扬.. Git无法以您想要的方式解析历史记录。

答案 2 :(得分:0)

第一个问题:检查你的git hooks。可能有些人正在拉动阶段进行修改。

第二个问题:通常在master的顶部创建功能分支。因此,当您想要在master中合并功能分支时,您必须执行

git checkout master
git pull --rebase
git rebase feature/post_video
git push

你会完成它。