在父分支从主分支更改时更改分支的引用

问题描述 投票:1回答:2

必须有一个类似的问题已经被问及这个主题,但我找不到它,也没有正确的词来寻找它。

假设我有这个:

a -- b                  <-- Master
      \
       d -- e           <-- Branch1
             \
              f -- g    <-- Branch2

但在某些时候,在合并到Master之前我必须重写deBranch1提交的代码,所以他们成为d'e'

a -- b                  <-- Master
     |\
     | d'--e'           <-- Branch1
      \
       d --e
            \
             f -- g    < -- Branch2

我怎么告诉我的Branch2 f的父母提交应该是e'而不是旧的e

a -- b                  <-- Master
      \
       d'-- e'          <-- Branch1
             \
              f -- g    <-- Branch2

基本上,当Branch1 Pull Request将通过Github合并到master时,Branch2将不包含ded'e'

git rebase
2个回答
4
投票

确切的命令是:

git rebase --onto Branch1 e Branch2

你将把旧的qazxsw poi base(qazxsw poi)之后的qazxsw poi的所有提交重放到新的Branch2 HEAD上。

所有你需要做的,当重写Branch1时,首先要制作一个标记(e分支或标记),以标记'Branch1'提交。


2
投票

(tl; dr:你所追求的实际上是Git的默认行为。只需告诉它你的分支的上游关系,你的命令就是简单的Branch1。)

当你告诉它关于上游关系并让它使用它们时,这就是Git的行为,就像它的默认情况一样。

试试这个:

tmp

并且你已经掌握了初始条件,现在在Branch1上完全重写:

e

要得到

git rebase

完全是你的照片,正如new() { touch $1; git add .; git commit -m$1; } git init forktest; cd $_ new a new b git checkout -b Branch1 new d new e git checkout -b Branch2 new f new g 所描绘的那样。现在,我和你一样,意识到我需要当前分支的rebase跟随Branch1的更改,所以我告诉Git关于这种关系:

git checkout -B Branch1 master
new d\'
new e\'
git checkout Branch2

并问Git一个简单的变形:

[jthill@gadabout forktest]$ lgdo
* 6a5240f (Branch1) e'
* 4487d2d d'
| * 53e5c85 (HEAD -> Branch2) g
| * e9e416b f
| * 157a7a3 e
| * 266e1d7 d
|/  
* 4b78ef0 (master) b
* 93871d3 a

Git已经发现Branch2的上游,通过其reflogs搜索,发现提交git log --graph --decorate --oneline是最近的历史合并基础并且使用它作为rebase cutoff。

如果你明确指定新的基数,默认情况下Git不会执行此搜索,但您可以使用[jthill@gadabout forktest]$ git branch -u Branch1 Branch 'Branch2' set up to track local branch 'Branch1'. 选项明确要求它。

© www.soinside.com 2019 - 2024. All rights reserved.