Lio*_*nAM 0 git version-control merge branch
假设我有 2 个分支 A(旧的)和 B(新的),最近分开了。在 A2 中我犯了一些错误(破坏了我想保留的一些文件的历史记录),我用 B2 修复了这些错误。
我想将分支B的工作目录带到提交A3的状态,但不合并/提交它。相反,我更喜欢只进行(暂存/未暂存)本地更改,以便在下一次提交后,B3 将与 A3 相同(但不以任何方式链接到 A2 或 A3):
A1 - [A2 - A3 - A4] (A will be deleted after the fix)
\
B2 - B3=(state of)A3 - A4
Run Code Online (Sandbox Code Playgroud)
在我的例子中这样做的原因是我搞乱了中间状态A2,我想用B2修复它,然后直接用A3继续。
我想到的最简单的方法是在另一个文件夹中签出 A3,删除 B 的内容并用 A3 的内容覆盖。
有没有Git命令可以直接实现这个功能?
新的(自 Git 2.23 起)命令可以从工作树的顶层git restore使用单个命令来执行此操作。由于这种情况不会影响 Git 的索引,因此这里不进行任何操作。但这是一件非常奇怪的事情,所以在做之前一定要确定这确实是你想要的。git restore --source commit --worktree -- .git restore
(添加--staged到git restore上面的内容也会使所有内容都为提交而暂存。请注意,这与默认情况下在“无覆盖”模式下运行时不同,而使用“覆盖”模式。)git checkout commit -- .git restoregit checkout
请注意,这不会将任何分支带到任何状态。分支没有这种状态:分支名称仅标识提交哈希 ID。此命令只是修改工作树git restore的内容以匹配指定的提交,而单独保留索引/暂存区域。后续使用 Git 索引中的任何内容,因此您必须运行才能影响后续提交。git commitgit add