git 从中创建分支的分支被删除

y4ekin9u  于 2023-10-14  发布在  Git
关注(0)|答案(2)|浏览(167)

我有一个主分支。
我从master创建了一个feature1分支。
我从feature1创建了一个feature2分支。
我知道在某个时候feature1将被合并到master中并被删除。
假设在那之前我不会推或拉,当那发生时我应该采取什么行动?
_编辑
我假设feature1在被合并之前会从master重定基础。

knsnq2tg

knsnq2tg1#

如果你假设feature1在合并之前被重基到master上,那么要用最新的master更新feature2,高级重基将起作用:

git fetch
git rebase feature1 feature2 --onto origin/master

用一句话来说:
feature2上所有不能被feature1访问的(非合并)提交,按顺序一个接一个地重放到origin/master上。
备注:
1.“无法到达”是Git表示“不在分支上”的方式。如果你列出了feature1feature2历史中的每一个提交,那么除了feature2上的那些新提交之外,大多数提交都会出现在这两个分支中。这些提交是唯一会被重新定基的。
1.请注意,在本例中,feature1表示feature1local 副本所指向的feature2上的提交。如果你没有本地副本,那么检查你的分支以获取提交ID,它是feature2上第一个新提交的 * 父代 *。(这也代表了origin/feature1在被重定基础之前 * 使用 * 指向的内容,并且可能随后被删除。

2uluyalo

2uluyalo2#

我同意@TTT的回答 * 一般 *,但**我想提出的情况下,feature1已被删除或重新定位。由于它是一个独立的分支,您不能假设当您想要运行命令时,该分支将在那里。假设你从这里开始:

* III (feature2, origin/feature2)
* HHH
* GGG
* FFF (feature1, origin/feature1)
* EEE
* DDD
* CCC (main, origin/main)
* BBB
* AAA

让我们假设每个本地分支都在跟踪其远程分支。
那么..如果feature1的开发人员决定在main的新版本之上 rebasefeature1,会发生什么?所以你去找,你发现这个:

* FFF' (origin/feature1)
* EEE'
* DDD'
* KKK (origin/main)
* JJJ
| * III (feature2, origin/feature2)
| * HHH
| * GGG
| * FFF (feature1)
| * EEE
| * DDD
|/
* CCC (main)
* BBB
* AAA

如果你足够幸运有一个feature1的本地副本,那么运行这个就可以了,正如TTT所建议的那样:

git rebase --onto origin/feature1 feature1 feature2

你会得到这样的结果:

* III' (feature2)
* HHH'
* GGG'
* FFF' (origin/feature1)
* EEE'
* DDD'
* KKK (origin/main)
* JJJ
| * III (origin/feature2)
| * HHH
| * GGG
| * FFF (feature1)
| * EEE
| * DDD
|/
* CCC (main)
* BBB
* AAA

然而,一般来说,保留一个分支的本地副本是不明智的,特别是如果它不是你的。例如,注意2个分支feature1分支(本地和远程分支)是如何指向不同的地方的。不好。你可能会想这样做来修复它:

git checkout feature1
git pull

这是一个的禁忌,因为现在你想把你在本地feature1和远程中的提交合并或变基,而 * origin/feature1分支,你在本地分支中的提交无关紧要**,应该被丢弃.所以你应该这样做,而不是调整指针:

git branch -f feature1 origin/feature1

但这是徒劳的,如果你问我...你不应该有一个本地的feature1分支摆在首位除非你 * 真的 * 需要它.然后,你应该运行什么来做你的分支的变基将是:

git rebase --onto origin/feature1 FFF feature2

git rebase --onto origin/main FFF feature2

相关问题