当我在交互式rebase期间分裂提交时,我经常想从最后一次提交中提取特定文件。如何“git reset --soft HEAD ^”单个文件?
我目前的进程是
- 复制的最后提交信息到我的剪贴板,
- git的复位--soft HEAD ^(最后提交破灭,变化都在上演)
- Unstage文件,我想提取
- 重新提交(粘贴复制的提交信息中)
- 添加/提交剩余的文件
- 继续与底垫
我觉得这样会更简单,如果我可以软重置一个特定的文件。
当我在交互式rebase期间分裂提交时,我经常想从最后一次提交中提取特定文件。如何“git reset --soft HEAD ^”单个文件?
我目前的进程是
我觉得这样会更简单,如果我可以软重置一个特定的文件。
您想要做git checkout $COMMIT_HASH some_file.ext
?
你可以用它来恢复一个文件到它以前的状态,并且git可以处理这个改变。
看来这你想要做什么:
git reset [-q] [commit] [--] paths…
这种形式重置指数 条目都paths
他们的状态在commit
。 (它不会影响工作树 ,也不会影响当前分支。)这意味着git reset与git add相反。
应该补充说,这个('git reset-path')步骤是在'git reset --soft HEAD ^'之后完成的。这里的想法是在'索引'或工作树中'HEAD'返回一个提交而不改变*任何东西*,然后使用新的退后“HEAD”对索引进行一次更改(而不是工作树) 。 – torek
这与'git commit --amend'组合会让我在中途停下来,除了更改本身丢失。 简而言之,我希望将更改从先前的提交中分离出来,而不必重置整个提交。 – Rhinon
不,检出单个文件不会消除其他更改。它只是恢复一个文件。 – mellowfish
唯一明显的问题(?)是'git checkout'触及工作树,而'git reset $ commit - $ path'没有。 – kostix