如何“git reset --soft HEAD ^”单个文件?

时间:2014-01-30 23:30:26

标签: git

当我在交互式rebase期间拆分提交时,我经常想从最后一次提交中提取特定文件。

我目前的流程是

  1. 将最后一次提交消息复制到剪贴板
  2. git reset --soft HEAD ^(撤消最后一次提交,暂停更改)
  3. 我想要提取的非正式文件
  4. 重新提交(粘贴在复制的提交消息中)
  5. 添加/提交其余文件
  6. 继续使用rebase
  7. 如果我可以软复位特定文件,我觉得这会更简单。

4 个答案:

答案 0 :(得分:8)

您是否尝试git checkout $COMMIT_HASH some_file.ext

您可以使用此功能将文件恢复为之前的状态,然后git将此更改发布。

答案 1 :(得分:7)

这似乎符合您的要求:

  

git reset [-q] [commit] [--] paths… 此表单会重置索引   所有pathscommit州的条目。 (它不是   影响工作树,也不影响当前分支。)

     

这意味着git reset与git add相反。

答案 2 :(得分:0)

我不确定这是否是最佳解决方案。

git reset HEAD~
git add .
git commit
(optional) git reset --hard HEAD

答案 3 :(得分:0)

一种简单的方法可能是

  1. 添加所有文件

    git add。

  2. 现在重置您不想提交的文件

    git reset'file1.ext' git reset'file2.ext' ... 如此

  3. 继续提交并推送