有没有办法在不更改工作目录中的文件的情况下还原旧提交?我做了一段时间的提交,但我提交的代码还没准备好,我希望这些更改作为未提交的更改保留在我的工作目录中,以便我现在可以继续处理它们.我查看了revert命令但更改了工作目录.我正在考虑检查旧版本,重置头1并存储更改,但我已经有了更改.我只是希望它好像我从来没有做过那样的提交方式,但我希望保留对文件的更改.
你可以做点什么
git revert hash_of_your_commit
git reset HEAD^
Run Code Online (Sandbox Code Playgroud)
之后,您将对还原的提交进行非分段更改.
最简洁的答案是不”。
\n\n更长的答案:git revert\xe2\x80\x94 像所有面向合并的操作一样,包括git cherry-pick、git rebase,当然git merge还有它本身\xe2\x80\x94 使用索引修改可修改的工作树。您可以提交或存储当前的工作,或者获取第二个工作树(使用另一个克隆,或者git worktree如果您有 Git 版本 2.5 或更高版本,则使用)。
您可以使用git revert -n,这会使工作树变脏,但我在这里并不建议这样做。
我处理这个问题的方法是现在进行提交:
\n\n$ git add ...\n$ git commit -m \'temporary commit, do not push\'\nRun Code Online (Sandbox Code Playgroud)\n\n然后,将所需的恢复作为常规提交:
\n\n$ git revert <hash>\nRun Code Online (Sandbox Code Playgroud)\n\n然后使用git rebase -i交换新的恢复提交和临时提交的顺序:
$ git rebase -i HEAD~2 # and edit the two "pick" lines\nRun Code Online (Sandbox Code Playgroud)\n\n然后使用git reset --soft HEAD^(或HEAD~1,相同的东西)或git reset --mixed HEAD^取消提交临时提交。此时,您(大部分)处于与进行临时提交之前相同的状态。
(主要)与索引状态有关:如果您使用git reset --soft,所有这些git add现在都有效。如果您使用git reset --mixed,那么这些git add现在都不会生效。
如果在开始任何操作之前,您已经有一些精心准备的状态\xe2\x80\x94,例如,来自git add -p您想要保留的\xe2\x80\x94,则这需要执行两次提交,然后git stash在恢复之前,之后git stash apply --index,更简单。这是因为git stash实际上进行了两次提交,并git stash apply --index分别提取这两次提交并将其应用到索引和工作树。(然后git stash drop如果一切顺利的话,那就是藏品。)
根据您的舒适程度git stash,您甚至可以将上面的整个序列替换git stash && git revert <hash> && git stash pop为单行代码。添加--index以恢复单独的索引状态。(请注意,如果您输入错误--index并且您的 Git 版本不够现代,无法检测到错误,这会将两个单独的提交混合在一起并删除存储。这就是为什么我喜欢使用而git stash apply不是在git stash pop这里使用。)
如果在此过程中出现任何问题,您将需要确切地知道发生了什么以及如何处理,因此这部分上方有“仅限专家”标题。
\n| 归档时间: |
|
| 查看次数: |
3179 次 |
| 最近记录: |