我想撤销我的git pull操作,因为在远程源上有不想要的提交,但是我不知道应该重置回哪个版本。我怎么能回到git拉取远程源之前的状态呢?
ruarlubt1#
或者比另一个答案更明确:
git pull
哎呀?
git reset --keep HEAD@{1}
git 1.7.1之前的版本没有--keep,如果你使用这样的版本,你可以使用--hard--但这是一个危险的操作,因为它会丢失所有本地更改。
--keep
--hard
致评论者
ORIG_HEAD是HEAD的前一个状态,由可能有危险行为的命令设置,以便于恢复。现在Git有了reflog,它就不那么有用了:HEAD@{1}大致相当于ORIG_HEAD(HEAD@{1}始终是HEAD的最后一个值,ORIG_HEAD是危险操作之前HEAD的最后一个值)
92vpleto2#
git reflog show应该会显示HEAD的历史记录,你可以用它来找出你在pull之前的位置,然后你可以reset你的HEAD到那个提交。
git reflog show
pull
reset
HEAD
yuvru6vn3#
这对我很有效。
git reset --hard ORIG_HEAD
撤消合并或提取:
$ git pull (1) Auto-merging nitfol CONFLICT (content): Merge conflict in nitfol Automatic merge failed; fix conflicts and then commit the result. $ git reset --hard (2) $ git pull . topic/branch (3) Updating from 41223... to 13134... Fast-forward $ git reset --hard ORIG_HEAD (4)
查看此内容:HEAD and ORIG_HEAD in Git了解更多。
qltillow4#
找到你要提交的<SHA#>,你可以在github中找到它,或者在命令行中输入git log或git reflog show,然后执行git reset --hard <SHA#>
<SHA#>
git log
git reset --hard <SHA#>
9lowa7mx5#
尽管上面的解决方案确实有效,但如果你想反转时钟而不是撤销git pull,这个答案是为你准备的。我的意思是,如果你想得到你的repo,就像X Mins一样,然后运行这个命令git reset --hard branchName@{"X Minutes ago"}注意:在你真正开始运行这个命令之前,如果你确定你想回到的时间,请只尝试这个命令,这里是我的情况。我目前在一个分支develop,我应该结帐到一个新的分支,并拉在另一个分支,让我们说分支A,但我不小心运行git pull origin A之前结帐。因此,为了撤消此更改,我尝试了以下命令git reset --hard develop@{"10 Minutes ago"}如果你是在windows命令并得到[error: unknown switch e](https://github.com/dahlbyk/posh-git/issues/106) 尝试添加如下引号git reset --hard 'develop@{"10 Minutes ago"}'`
X
git reset --hard branchName@{"X Minutes ago"}
develop
A
git pull origin A
git reset --hard develop@{"10 Minutes ago"}
e](https://github.com/dahlbyk/posh-git/issues/106) 尝试添加如下引号
vsdwdz236#
撤销git pull
git reset --hard HEAD^
将本地存储库返回到以前的提交状态。(注意:HEAD^表示当前分支尖端的第一个直接父级。HEAD^是HEAD^1的缩写,如果你愿意,你也可以继续前进(例如HEAD^2,HEAD^3 ...)。重置后,如果有未知文件(原始git pull的结果),它们将被列为未跟踪文件,你可以使用
git clean -fd
bvjveswy7#
来自www.example.comhttps://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree撤消脏的工作树中的合并或拉取
$ git pull (1) Auto-merging nitfol Merge made by recursive. nitfol | 20 +++++---- ... $ git reset --merge ORIG_HEAD (2)
即使您的工作树中有局部修改,当您知道其他分支中的更改不与它们重叠时,您也可以放心地使用git pull。检查合并结果后,您可能会发现另一个分支中的更改不令人满意。运行git reset --hard ORIG_HEAD将使您返回到原来的位置,但它将放弃您不希望的本地更改。git reset --merge将保留您的本地更改。另请参见https://stackoverflow.com/a/30345382/621690
git reset --merge
wvmv3b1j8#
重置主分支:
git reset --hard origin/master
8条答案
按热度按时间ruarlubt1#
或者比另一个答案更明确:
哎呀?
git 1.7.1之前的版本没有
--keep
,如果你使用这样的版本,你可以使用--hard
--但这是一个危险的操作,因为它会丢失所有本地更改。致评论者
ORIG_HEAD是HEAD的前一个状态,由可能有危险行为的命令设置,以便于恢复。现在Git有了reflog,它就不那么有用了:HEAD@{1}大致相当于ORIG_HEAD(HEAD@{1}始终是HEAD的最后一个值,ORIG_HEAD是危险操作之前HEAD的最后一个值)
92vpleto2#
git reflog show
应该会显示HEAD的历史记录,你可以用它来找出你在pull
之前的位置,然后你可以reset
你的HEAD
到那个提交。yuvru6vn3#
这对我很有效。
撤消合并或提取:
查看此内容:HEAD and ORIG_HEAD in Git了解更多。
qltillow4#
找到你要提交的
<SHA#>
,你可以在github中找到它,或者在命令行中输入git log
或git reflog show
,然后执行git reset --hard <SHA#>
9lowa7mx5#
尽管上面的解决方案确实有效,但如果你想反转时钟而不是撤销git pull,这个答案是为你准备的。我的意思是,如果你想得到你的repo,就像
X
Mins一样,然后运行这个命令git reset --hard branchName@{"X Minutes ago"}
注意:在你真正开始运行这个命令之前,如果你确定你想回到的时间,请只尝试这个命令,这里是我的情况。
我目前在一个分支
develop
,我应该结帐到一个新的分支,并拉在另一个分支,让我们说分支A
,但我不小心运行git pull origin A
之前结帐。因此,为了撤消此更改,我尝试了以下命令
git reset --hard develop@{"10 Minutes ago"}
如果你是在windows命令并得到[error: unknown switch
e](https://github.com/dahlbyk/posh-git/issues/106) 尝试添加如下引号
git reset --hard 'develop@{"10 Minutes ago"}'`vsdwdz236#
撤销git pull
将本地存储库返回到以前的提交状态。(注意:HEAD^表示当前分支尖端的第一个直接父级。HEAD^是HEAD^1的缩写,如果你愿意,你也可以继续前进(例如HEAD^2,HEAD^3 ...)。重置后,如果有未知文件(原始git pull的结果),它们将被列为未跟踪文件,你可以使用
bvjveswy7#
来自www.example.comhttps://git-scm.com/docs/git-reset#Documentation/git-reset.txt-Undoamergeorpullinsideadirtyworkingtree
撤消脏的工作树中的合并或拉取
即使您的工作树中有局部修改,当您知道其他分支中的更改不与它们重叠时,您也可以放心地使用
git pull
。检查合并结果后,您可能会发现另一个分支中的更改不令人满意。运行
git reset --hard ORIG_HEAD
将使您返回到原来的位置,但它将放弃您不希望的本地更改。git reset --merge
将保留您的本地更改。另请参见https://stackoverflow.com/a/30345382/621690
wvmv3b1j8#
重置主分支: