Git Rebase主要冲突

mr1*_*086 1 php git merge webserver rebase

我把主人变成了分支时,我在分支上遇到了一些冲突.

场景是:

分支大师,做一些修改,提交所说的修改.Checkout master,进行一些更改,提交所述更改,checkout branch-1.试着改变主人 - 冲突..

现在我有其他开发人员以类似的方式工作.

Master在包括网络服务器在内的所有repo上保持同步,我不希望主人的历史被更改.

如果我解决过去与冲突点相冲突的rebase冲突,如果我检查主人并将其与分支合并 - 将更改主人的历史 - 或者这些冲突解决方案是否应用于所有合并的工作的顶部?

geo*_*ock 6

想象一下你有目前的情况:

- A - B - C - D
   \          ^
    - X - Y   master
          ^
          branch1
Run Code Online (Sandbox Code Playgroud)

运行git checkout branch1; git rebase master将从branch1移动提交,以便它们应用于分支的顶部:

              master
              v
- A - B - C - D
               \      
                - X - Y 
                      ^
                      branch1
Run Code Online (Sandbox Code Playgroud)

这不会改变master,但它以两种方式改变branch1:

  1. 通过改变提交的父母X来自AD你会改变提交的ID X尽可能的Git而言,实际上它现在是一个全新的承诺(和因为X有一个新的ID,Y拥有新的父,所以Y得到一个新的ID太,如果分支上有更多提交,那么等等.
  2. 您需要做的任何冲突解决方案都将更改提交的内容.

如果你已经将branch1送到一个远程存储库,那么重新设置它是一个非常糟糕的主意; 改变已经分享的历史只会导致问题.

假设您没有推送branch1,则可以将其合并到master(with git checkout master; git merge branch1)中,这将导致master被快速转发为commit Y.这为您提供了一个整洁的线性历史,而无需更改主数据:

- A - B - C - D - X - Y
                      ^
                      branch1 AND master
Run Code Online (Sandbox Code Playgroud)

如果您已经推送了branch1,那么您应该避免使用rebase并使用合并(使用git checkout master; git merge branch1),这将不会更改其中任何一个的历史记录,但会M在主分支上创建一个新的提交(在此图中标记):

- A - B - C - D - M
   \            / ^
    - X - Y - -   master
          ^
          branch1
Run Code Online (Sandbox Code Playgroud)