Git 如何将一个分支与一个部分重设基础并强制推送的主分支合并?
最初,我需要从主服务器恢复一些提交,包括合并的拉请求。让我们称之为“不必要的重构” 但这些变化在未来是需要的 我根据master的当前状态创建了一个新的分支develop,以便在那里进行这些更改Git 如何将一个分支与一个部分重设基础并强制推送的主分支合并?,git,tfs,Git,Tfs,最初,我需要从主服务器恢复一些提交,包括合并的拉请求。让我们称之为“不必要的重构” 但这些变化在未来是需要的 我根据master的当前状态创建了一个新的分支develop,以便在那里进行这些更改 我决定将master硬重置为pull-request-merge的父提交(这是repo的稳定状态): git复位——硬ad23b887 然后,选择其他不是“不需要的重构”的提交: git cherry pick 现在,我想执行一个force push命令,它应该覆盖原始/主分支历史 在未来,我将需要
git复位——硬ad23b887
git cherry pick
git-reset——硬ad23b887
假设ad23b887是提交B
A - B [master]
|\
| C ----------- M [develop]
\ /
F - G - H - I
这是同一张图,只是移动了一点,这样我们就可以和master一起工作了
然后,选择其他不是“不需要的重构”的提交:git cherry pick
假设是G和I
A - B - G1 - I1 [master]
|\
| C ----------- M [develop]
\ /
F - G - H - I
现在,我想执行一个force push命令,它应该覆盖原始/主分支历史
是的,但是使用。这样更安全。我把它化名为repush
在未来,我将需要将“不需要的重构”合并到develop的master中,届时将对其进行100%测试。但是,如果事实上,这两个分支有不同的历史(因为樱桃采摘和重置了一个头),那么我应该如何合并这两个分支呢
在母版的基础上进行再基开发。这将在master上重播developer的提交。合并将消失。你从中挑选出来的现在多余的提交也是如此,因为现在开发已经从master那里得到了这些更改
A - B - G1 - I1 [master]
|\
| C ----------- M [develop]
\ /
F - G - H - I
$ git checkout develop
$ git rebase master
A - B - G1 - I1 [master]
\
C - F - H [develop]
现在,您可以通过正常的公关流程进行合并开发
A - B - G1 - I1 -------- M1 [master]
\ /
C - F - H
G1 - I1
/ \
A - B ------- N [master]
|\
| C ----------- M [issue/#1234]
\ /
F - G - H - I
G1 - I1
/ \
A - B ------- N --------- M1 [master]
\ /
C - F - H
重置一个头部,然后只挑选我在这种情况下需要的头部,这是恢复提交的正确方法吗 让我们回到你摘樱桃之前 避免像develope这样的泛型分支。给它一个与你正在做的事情相关的名字。一个好的选择是在问题跟踪器中使用ID,这会鼓励每个分支都有问题
A - B [master]
|\
| C ----------- M [issue/#1234]
\ /
F - G - H - I
我建议永远不要直接向大师承诺,而是始终使用。这确保每项变更都经过了审查、QA等PR流程。这意味着主人总是稳定地在上面工作
要做到这一点,做一个新的分支只是为了合并樱桃采摘
$ git checkout -b issue/#abcd
$ git cherry-pick G I
G1 - I1 [issue/#abcd]
/
A - B [master]
|\
| C ----------- M [issue/#1234]
\ /
F - G - H - I
他们通过正常的公关流程将其合并
A - B - G1 - I1 -------- M1 [master]
\ /
C - F - H
G1 - I1
/ \
A - B ------- N [master]
|\
| C ----------- M [issue/#1234]
\ /
F - G - H - I
G1 - I1
/ \
A - B ------- N --------- M1 [master]
\ /
C - F - H
现在在master上重新设置问题/1234的基础
G1 - I1
/ \
A - B ------- N [master]
\
C - F - H [issue/#1234]
并通过正常的公关流程合并问题/1234
A - B - G1 - I1 -------- M1 [master]
\ /
C - F - H
G1 - I1
/ \
A - B ------- N [master]
|\
| C ----------- M [issue/#1234]
\ /
F - G - H - I
G1 - I1
/ \
A - B ------- N --------- M1 [master]
\ /
C - F - H
历史上的这些颠簸被称为“特征泡泡”,它们正是你想要看到的。它们有助于保持历史简单易懂,掌握稳定。让我们想象一下
最初,我需要从主服务器恢复一些提交,包括合并的拉请求
我根据master的当前状态创建了一个新的分支develop,以便在那里进行这些更改
我决定硬重置master到pull-request-merge的父提交(这是repo的稳定状态):git-reset——硬ad23b887
假设ad23b887是提交B
A - B [master]
|\
| C ----------- M [develop]
\ /
F - G - H - I
这是同一张图,只是移动了一点,这样我们就可以和master一起工作了
然后,选择其他不是“不需要的重构”的提交:git cherry pick
假设是G和I
A - B - G1 - I1 [master]
|\
| C ----------- M [develop]
\ /
F - G - H - I
现在,我想执行一个force push命令,它应该覆盖原始/主分支历史
是的,但是使用。这样更安全。我把它化名为repush
在未来,我将需要将“不需要的重构”合并到develop的master中,届时将对其进行100%测试。但是,如果事实上,这两个分支有不同的历史(因为樱桃采摘和重置了一个头),那么我应该如何合并这两个分支呢
在母版的基础上进行再基开发。这将在master上重播developer的提交。合并将消失。你从中挑选出来的现在多余的提交也是如此,因为现在开发已经从master那里得到了这些更改
A - B - G1 - I1 [master]
|\
| C ----------- M [develop]
\ /
F - G - H - I
$ git checkout develop
$ git rebase master
A - B - G1 - I1 [master]
\
C - F - H [develop]
现在,您可以通过正常的公关流程进行合并开发
A - B - G1 - I1 -------- M1 [master]
\ /
C - F - H
G1 - I1
/ \
A - B ------- N [master]
|\
| C ----------- M [issue/#1234]
\ /
F - G - H - I
G1 - I1
/ \
A - B ------- N --------- M1 [master]
\ /
C - F - H
重置一个头部,然后只挑选我在这种情况下需要的头部,这是恢复提交的正确方法吗 让我们回到你摘樱桃之前 避免像develope这样的泛型分支。给它一个与你正在做的事情相关的名字。一个好的选择是在问题跟踪器中使用ID,这会鼓励每个分支都有问题
A - B [master]
|\
| C ----------- M [issue/#1234]
\ /
F - G - H - I
我建议永远不要直接向大师承诺,而是始终使用。这确保每项变更都经过了审查、QA等PR流程。这意味着主人总是稳定地在上面工作
要做到这一点,做一个新的分支只是为了合并樱桃采摘
$ git checkout -b issue/#abcd
$ git cherry-pick G I
G1 - I1 [issue/#abcd]
/
A - B [master]
|\
| C ----------- M [issue/#1234]
\ /
F - G - H - I
他们通过正常的公关流程将其合并
A - B - G1 - I1 -------- M1 [master]
\ /
C - F - H
G1 - I1
/ \
A - B ------- N [master]
|\
| C ----------- M [issue/#1234]
\ /
F - G - H - I
G1 - I1
/ \
A - B ------- N --------- M1 [master]
\ /
C - F - H
现在在master上重新设置问题/1234的基础
G1 - I1
/ \
A - B ------- N [master]
\
C - F - H [issue/#1234]
并通过正常的公关流程合并问题/1234
A - B - G1 - I1 -------- M1 [master]
\ /
C - F - H
G1 - I1
/ \
A - B ------- N [master]
|\
| C ----------- M [issue/#1234]
\ /
F - G - H - I
G1 - I1
/ \
A - B ------- N --------- M1 [master]
\ /
C - F - H
历史上的这些颠簸被称为“特征泡泡”,它们正是你想要看到的。它们有助于简化历史记录