恢复分阶段更改,保持未分级更改

时间:2016-06-22 13:10:14

标签: git commit revert git-reset

我在git中有一些暂存和一些非分段更改,以及一些未跟踪的文件。我想保留未分级的更改和未跟踪的文件,并丢弃分阶段的更改。

在命令行上执行此操作最简单的方法是什么?

3 个答案:

答案 0 :(得分:4)

  

我在git中有一些暂存和一些非分段更改,以及一些未跟踪的文件。我想保留未经修改的更改和未跟踪的文件,并丢弃提交的更改。

正如您在评论中澄清的那样,您的意思是“......并放弃暂存的更改”(而不是已提交的更改)。通常,您可以使用git reset撤消git add。但在您的情况下,您希望保留未分级的更改,所以:

git commit     # move staged to a commit, does not touch unstaged changes/unadded files

git checkout HEAD^    # checkout the previously committed version while keeping unstaged changes/unadded files   

git branch yourbranchname --force    # to grab the branch and move it back as well

答案 1 :(得分:1)

git reset HEAD^

将HEAD重置为其父级,现在提交更改将在索引中被丢弃,但保留在工作树中。

git checkout -- paths_of_files_whose_changes_are_to_be_discarded_in_the_work_tree

放弃工作树中的更改。

答案 2 :(得分:0)

还原未进行的更改保留已进行的更改,请将其添加到您的~/.gitconfig

[alias]
    revert-unstaged = "!sh -c '{ git commit -m=tmp && git reset --hard HEAD && git reset --soft HEAD^ || git reset --hard HEAD; } > /dev/null 2>&1; git status'"

然后您可以执行git revert-unstaged,该操作将执行以下操作:

  • 如果有阶段性更改,请创建本地提交

  • 使用git reset --hard HEAD

  • 删除所有未进行的更改
  • 如果已进行更改,请还原本地提交以恢复更改

  • 运行git status以获得新状态的概述