sta*_*tle 5 git tortoisegit git-extensions
抱歉,如果某处有重复的内容,我在寻找解决方案时淹没在大量更改提交消息的技巧中(这对我没有帮助)。
我有两组更改,每个更改应该是一次提交的一部分。不幸的是,我在早上开始了第二个变更集,没有注意到我忘记在前一天晚上提交第一个。
在大多数情况下,它们会影响不同的文件。但是,有一个文件包含两个变更集的更改,如果在没有第二个变更集的情况下推送会破坏构建。太糟糕了,我想在一个单独的分支上工作,直到功能正常。
可悲的是,当我注意到有一个包含两者更改的文件时,我已经提交(未推送)第一个变更集并在其上创建了工作分支。
有没有办法编辑我的提交,以便我可以提取影响变更集 2 的更改?
在 Mercurial 中,您可以通过以下方式解开提交
当 GUI 重新打开时,补丁包含了它们应该包含的内容,可以完成并推送。
这实际上是我的目标工作流程。git有类似的东西吗?
我使用的工具:Win10 上的 TortoiseGit 和 GitExtensions
编辑:答案中建议的解决方案
git checkout new_branch
git reset -p HEAD~1
git add -p
...
git commit -m "my changeset 1"
git add
git commit -m "my changeset 2"
git checkout old_branch
git reset --hard <new_branch>~1
Run Code Online (Sandbox Code Playgroud)
这给了我old_branch变更集 1 和new_branch变更集 2。
再次感谢!
使用git add -p选择性地级更改/帅哥,你打算提交。提交第一批后,您可能会留下第二组更改,在这种情况下,您可以正常添加文件并提交。
Git 会询问你想对每次提交做什么。类型 '?' 求助。按 'y' 以暂存大块,按 'n' 将大块从暂存区排除。
如果 git 没有选择足够细的大块,当它询问您如何处理大块时,您可以按“e”,您的编辑器将打开,您可以选择所需的大块部分包括。
最近了解了这个,它非常有用。