[英]Moving merged commits back to old branch, reverting master and keeping changes
[英]Moving changes between commits, to get a clean branch?
我们为每张票创建新的分支。 工单完成后,分支将合并到 master 中。 每个票证分支通常有多个提交。
为了可读性和测试,我尝试创建提交:
有时我事先确切地知道我打算在分支中做什么。 例如:
但我经常发现一个改进的机会,按主题应该属于以前的提交。 继续上面的例子,我可能会发现在提交 2 中,我将一个变量重命名为“v”,当时我认为“访问者”会是一个更好的名字。
现在我选择两个选项之一,我认为这两个选项都不好: - 我创建了一个提交 5,它更改了我在提交 2 中已经更改的内容,但做得更好一点。 我认为这个选项很糟糕,因为混淆了测试和项目历史的可读性。 - 我重置提交 2-4 并重做它们,现在将我事后意识到的改进插入到它所属的提交 2 中。 我认为这次提交很糟糕,因为这需要时间来完成。
我认为第二个选项会产生更好的提交历史,但需要时间来完成。
这引出了我的问题:有没有更快的方法将此更改移动到提交 2 中?
我梦想着一个类似于 Webstorm 中的 diff 界面的界面(我可以在其中单击更改以包含它们或还原它们),但这也让我可以选择要设置更改的提交。
有哪些解决方案?
您可以使用这些算法(使用rebase
激活):
更详细地描述如下算法
让我们假设我们有这样的 git log 输出:
git log --pretty=format:"%h %s" --graph
* 43e94d8 fourth commit
* 8bfc119 third commit
* d5c9a25 second commit
* e17b227 first commit
然后我们从第二次提交创建新分支:
git branch feature-to-change d5c9a25
git checkout feature-to-change
然后在 feature-to-change 分支中创建第五次提交,并在其上应用第三次和第四次提交:
# create and commit fifth commit
git log --pretty=format:"%h %s" --grap
* 86660c9 fifth commit
* d5c9a25 second commit
* e17b227 first commit
git rebase feature-to-change feature
git log --pretty=format:"%h %s" --graph
* ee0a502 fourth commit
* 2e0e2c6 third commit
* 86660c9 fifth commit
* d5c9a25 second commit
* e17b227 first commit
现在我们已经按适当的顺序提交了,但是我们需要压缩第二次和第五次提交
git rebase -i HEAD~4
pick d5c9a25 second commit
squash 86660c9 fifth commit
pick 2e0e2c6 third commit
pick ee0a502 fourth commit
压扁后,您将获得此历史记录
git log --pretty=format:"%h %s" --graph
* 758d85c fourth commit
* 3761310 third commit
* ee739dd second commit
* e17b227 first commit
这些步骤不会占用很多时间,最后您将获得具有漂亮提交历史的分支feature-to-change
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.