情况如下:
commit_A : contains fileA and fileB
commit_B : contains fileC and fileD
我想将 fileA 从 commit_A 移动到 commit_B。
我大部分时间所做的是交互式变基,我将commit_A标记为e(用于编辑),然后重置提交,对文件A进行提交并仅对文件B重做提交,然后完成变基,最后我仅将 fileA 修复为 commit_B 的新提交。 我的问题是,有没有更好的方法呢?因为看起来不太理想, 谢谢
还有什么更好的办法吗?
我相信有——它是混合重置。
让我们想象一下您的头位于
commit_B
上。要执行的命令如下:
如果
commit_A
不是您的存储库中的第一个提交,您需要重置git reset [--mixed] HEAD~~
现在您在最后两次提交中所做的所有更改都在工作树中,但不在阶段区域中。
阶段文件B:
git add fileB
并提交git commit -m 'fileB'
暂存其余部分:
git add .
并提交git commit -m 'A,C,D files'
如果您的旧提交已经在远程仓库上,您也必须在那里重写历史记录:
git push --force
瞧,它应该可以工作。
通常 git 允许以不同的方式做很多事情,所以通常这只是一个偏好问题或者你拥有这些东西有多好(比如
git checkout
vs git switch
)。例如,
git rebase
经常用于压缩提交,但它不保留日期(结果将具有最旧提交的日期),但git reset --soft
没有这样的问题。