1

我们遇到了一种情况,因为我们在 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
    
  • 从这个变基中,我遇到了很多冲突:对于在远程分支功能/post_video 中推送的每一个提交,我都必须解决一个“冲突”。

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

谢谢,

4

3 回答 3

3

远程分支的结帐将使您处于DETACHED HEAD 模式

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

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:
于 2014-06-23T12:55:59.807 回答
0

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

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

于 2014-06-23T12:57:20.650 回答
0

第一个问题:检查你的 git 钩子。可能他们中的一些人正在拉动阶段进行修改。

第二个问题:通常你在 master 的顶部创建特性分支。因此,当您想在 master 中合并您的功能分支时,您必须这样做

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

你会完成的。

于 2014-06-23T13:01:41.863 回答