gpt4 book ai didi

git - 您如何撤消从功能分支提交到主线的更改但保持分支最新?

转载 作者:太空狗 更新时间:2023-10-29 13:11:08 25 4
gpt4 key购买 nike

有时我们会遇到问题,我们将一个功能分支提交到我们的基线,并发现在某些情况下它可能会出错,因此需要恢复更改,而不会丢失此后所做的所有其他提交。但是,需要有人继续在原来的分支上工作。

我不想在主线上使用 git rebase 来更改历史记录(因为这本身会导致各种问题),但是当我使用 git revert 在主线上,然后在分支上运行 git merge 以获取对系统所做的任何其他更改,然后所有完成的工作都会消失。

我该怎么做才能使分支上的更改保持完整?

最佳答案

我假设您不想做任何 rebase 和重置,这是仅 merge 的方法。

假设您有两个分支 masterfeature。因此,您已决定将该功能 merge 到 master 中:

$ git merge feature

现在,您的所有feature 更改都在master 上了。我假设最困难的情况 - 在两个分支上 merge 后都进行了提交。但是,突然间您发现 feature 没有任何作用,所有东西都坏了并决定恢复它。你的历史是(你可以用 git log --graph feature master 查看它):

* commit 838f29fda2333bdbfc0d1be44d2387e6119dc4e8
|
| f3
|
| * commit 58d1e3f0e032cc77d4ab2bbf0bdfe6407b96b7e6
| |
| | m3
| |
| * commit afb600fe382befe095f9b8a6e9eef98be25c929b
| |\ Merge: 5cddc52 8660a59
| |/
|/|
| | Merge branch 'feature'
| |
* | commit 8660a59eeb13f9b3447846ba6977140f7c86c7a4
| |
| | f2
| |
* | commit 6f76e2288d69808b97981340198fd8044ab47630
| |
| | f1
| |
| * commit 5cddc528de424a01d1d18552ddea93435618e2f7
| |
| | m2
| |
| * commit fa6ebb76f9f0308f7dcd1148503534668fa15358
|/
|
| m1
|
* commit 4e3aa05d6f46eb14bbbc253a42325e9a53a3393e

注意 merge 后完成的提交 f3 和 m3。因此,您需要小心地只删除 master 中出现的 feature 的更改。

要做到这一点,您可以恢复 master 上的 merge 提交,保留 master 的基础(参数 -m1)。为了实现它,我基于 merge 点创建了一个新分支并在其中恢复:

$ git checkout -b feature-revert afb600fe
$ git revert -m1 HEAD

现在,我们在分支 feature-revert 上恢复了更改。现在很简单,只需通过 merge 将其放入 master 即可:

$ git checkout master
$ git merge feature-revert

因此,目前 master 没有任何来自 feature 的东西。但是,如果稍后您想要重新 merge 该功能,所有还原的更改都将在 master 中丢失,因为它们已被 merge 和还原。

要解决该问题,您应该还原还原(呵呵)并将其 merge 回功能:

$ git checkout feature-revert
$ git revert HEAD
$ git checkout feature
$ git merge feature-revert

我想我们不再需要这个分支了,因为我们已经 merge 了它,但如果你愿意,你可以保留它:

$ git branch -d feature-revert

你应该知道,将它 merge 回来会将所有更改从 master 带到 feature 中,这通常是正常的工作流程。

现在,在 feature 中进行修复后,您可以随时像往常一样将其再次 merge 到 master 中。

关于git - 您如何撤消从功能分支提交到主线的更改但保持分支最新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17805979/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com