我目前在一个分支(即design
)中工作,并且已经做了许多更改,但是我需要放弃它们并将其重置为匹配存储库版本。 我认为git checkout design
可以实现这一点,但它只是告诉我我已经在design
分支中,并且有3个修改过的文件。
我该如何放弃这些更改并获取远程服务器上当前分支的状态?
git checkout -f
命令,这将会放弃所有未在所有分支和主分支中提交的本地更改。git reset --hard 命令可以帮助你放弃最近一次提交之后的所有更改。
git reset --hard HEAD^
的意思是撤销最近一次的提交并删除所有未提交的更改。 - deadfishgit reset origin/[你的分支] --hard
。这与之前的命令相同,但更容易理解正在发生的事情。 - Roberto Fernandesgit diff master > branch.diff
git apply --reverse branch.diff
git rm [branch name].diff
删除 [branch name].diff 文件。 - karolus如果你不想让设计有任何改变,而且一定要与远程分支完全匹配,那么你也可以删除该分支并重新创建它:
# Switch to some branch other than design
$ git br -D design
$ git co -b design origin/design # Will set up design to track origin's design branch
当您想要丢弃本地分支中的更改时,可以使用git stash命令将这些更改储存。
git stash save "some_name"
您的更改将被储存,如果需要,您可以稍后检索这些更改,否则您也可以删除它。 执行此操作后,您的分支将没有任何未提交的代码,并且您可以使用git pull从主分支拉取最新的代码。
git reset ./ HEAD <--取消暂存已经暂存的更改
git checkout ./ <--放弃未暂存的更改
@Will,Git Immersion 是一个非常好而且简单的 Git 教程。它会向你展示如何撤销以下情况的更改:未暂存、已暂存以及已提交。请参考第14-18个实验。
Ruby
,但似乎并不总是一个选择。 - Vishnu在合并后忘记立即检出develop之后,我发现了这个问题。你猜对了:我直接在master上修改了一些文件。天啊!由于我的情况并不是独特的(我们都做过这样的事情,不是吗;->),我将提供一种可逆的方法,用于放弃所有更改,使master再次看起来像develop。
执行git diff
查看哪些文件被修改并评估我的错误范围后,我执行了以下操作:
git stash
git stash clear
首先,将所有更改存储起来,然后再清除它们。所有误写到master文件中的更改都将消失,使其恢复正常。
假设我现在想要恢复这些更改。我可以这样做。第一步是找到刚刚清除/删除的保存的哈希值:
git fsck --no-reflog | awk '/dangling commit/ {print $3}'
git stash apply hash-of-cleared-stash
stash
为您提供了许多灵活性,以从您的错误中恢复过来。git checkout -f
这个命令可以满足你的需求。唯一需要注意的是,一旦执行完毕,就无法撤销。
对于其他人,如果您只想还原单个文件上的更改:
git restore <fileName>