我有一个Sprint分支(Sprint1
),由多个功能分支(从最新到最早列出)组成:
我想通过一个操作从功能#2的分支中删除Sprint分支中的所有内容。有办法吗?
实际上,我对功能2的提交有3个以上,并且不想被一个接一个地还原,以防万一我错过了提交。由于功能#3和#4是基于功能#2构建的,因此我将要解决很多合并冲突,现在需要保持独立。我只想拉出功能2并一次性解决所有合并冲突。
根据RomainValeri的要求,以下是从我的git log --oneline --decorate --simplify-by-decoration --all
分支运行Sprint1
的结果:
f12b0af (HEAD -> Sprint1) Merge of Feature #3 and Feature #4.
70c028b (Feature3) Feature #3, Commit #2
216764a (Feature4) Feature #4, Commit #1
060d98e (Feature2) Feature #2, Commit #3
2069da0 (Feature1) Feature#1 Commit #1
1d05fc0 (master) First Commit
答案 0 :(得分:0)
让我们在这里假设名称:sprint
代表sprint分支,而您尝试从feature2
分支还原全部。
# next line was my first idea but probably no good
git rev-list $(git merge-base sprint feature2)..feature2
# since we have master as a ref for the merge-base, let's go simpler
git rev-list master..feature2
# or, if feature2 is branched of feature1 :
git rev-list feature1..feature2
将为您提供要还原的提交列表。
(如果您已经删除了feature2
,只需在合并到sprint
之前的提交时重新创建它,或从reflog中获取它)
然后,您可以在不提交的情况下进行链式还原,并在最后仅提交一次:
git revert -n <commit1>
git revert -n <commit2>
...
git commit -m "Revert of commits 1, 2, 3, ..."
但是我不会进一步自动化该过程,因为您可能必须一路解决冲突。