我假设您不想进行任何变基和重置,这是仅合并的方法。
假设你有两个分支master
and feature
。
因此,您决定将该功能合并到master
:
$ git merge feature
现在,你拥有了你的一切feature
主人身上的变化。我假设最困难的情况是在两个分支上合并后都进行了提交。但是,突然你发现没有任何作用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
请注意合并后已完成的提交 f3 和 m3。因此,您需要小心地仅删除来自的更改feature
出现在master
.
为此,您可以恢复合并提交master
,保持master的基础(参数-m1
)。为了实现它,我根据合并点创建一个新分支并在其中恢复:
$ git checkout -b feature-revert afb600fe
$ git revert -m1 HEAD
现在,我们在分支上恢复了更改feature-revert
。现在很简单,只需通过合并将其放入 master 即可:
$ git checkout master
$ git merge feature-revert
所以,目前master
没有任何来自feature
。但是,如果稍后您想要重新合并该功能,则所有恢复的更改都将在 master 中丢失,因为它们已被合并并恢复。
要解决这个问题,你应该恢复 恢复 恢复(呵呵)并将其合并回feature
:
$ git checkout feature-revert
$ git revert HEAD
$ git checkout feature
$ git merge feature-revert
我想我们不再需要该分支,因为我们已经合并了它,但如果您愿意,您可以保留它:
$ git branch -d feature-revert
您应该意识到,将其合并回来会带来来自master
into feature
这通常是正常的工作流程。
现在,修复后feature
你可以将它再次合并到master
任何时候都像往常一样。