【发布时间】:2016-10-24 10:57:14
【问题描述】:
我在 git 中有一些暂存和未暂存的更改,以及一些未跟踪的文件。我想保留未暂存的更改和未跟踪的文件,并丢弃暂存的更改。
在命令行上最简单的方法是什么?
【问题讨论】:
标签: git commit revert git-reset
我在 git 中有一些暂存和未暂存的更改,以及一些未跟踪的文件。我想保留未暂存的更改和未跟踪的文件,并丢弃暂存的更改。
在命令行上最简单的方法是什么?
【问题讨论】:
标签: git commit revert git-reset
我在 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
【讨论】:
git reset HEAD^
将 HEAD 重置为其父级,现在提交更改在索引中被丢弃但保留在工作树中。
git checkout -- paths_of_files_whose_changes_are_to_be_discarded_in_the_work_tree
放弃工作树中的更改。
【讨论】:
git reset -- path_of_file 可以丢弃索引中文件的更改。另一个 git checkout -- path_of_file 可以丢弃工作树中的 chages。
要恢复未暂存的更改并保留暂存的更改,请将其添加到您的~/.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 以了解新状态的概览
【讨论】: