重置单个文件并修复到另一个提交

问题描述 投票:0回答:1

情况如下:

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 的新提交。 我的问题是,有没有更好的方法呢?因为看起来不太理想, 谢谢

git
1个回答
0
投票

还有什么更好的办法吗?

我相信有——它是混合重置。

让我们想象一下您的头位于

commit_B
上。要执行的命令如下:

  1. 如果

    commit_A
    不是您的存储库中的第一个提交,您需要重置
    你的头在它之前声明:
    git reset [--mixed] HEAD~~

    现在您在最后两次提交中所做的所有更改都在工作树中,但不在阶段区域中。

  2. 阶段文件B:

    git add fileB
    并提交
    git commit -m 'fileB'

  3. 暂存其余部分:

    git add .
    并提交
    git commit -m 'A,C,D files'

  4. 如果您的旧提交已经在远程仓库上,您也必须在那里重写历史记录:

    git push --force

瞧,它应该可以工作。
通常 git 允许以不同的方式做很多事情,所以通常这只是一个偏好问题或者你拥有这些东西有多好(比如

git checkout
vs
git switch
)。
变基/合并、变基/重置等也是如此。

例如,

git rebase
经常用于压缩提交,但它不保留日期(结果将具有最旧提交的日期),但
git reset --soft
没有这样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.