繁体   English   中英

在提交之间移动更改以获得干净的分支?

[英]Moving changes between commits, to get a clean branch?

我们为每张票创建新的分支。 工单完成后,分支将合并到 master 中。 每个票证分支通常有多个提交。

为了可读性和测试,我尝试创建提交:

  • 是原子的
  • 只关注一个主题
  • 不要破坏解决方案

有时我事先确切地知道我打算在分支中做什么。 例如:

  1. 为访客注册创建后端api
  2. 重构访客分类功能
  3. 为访客注册创建前端
  4. 创建简单的访客注册确认页面

但我经常发现一个改进的机会,按主题应该属于以前的提交。 继续上面的例子,我可能会发现在提交 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM