撤消git拉,如何将回购旧状态
有没有办法恢复或撤消git pull,这样我的源/回购会在git pull之前回到旧状态? 我想这样做,因为它合并了一些我不想这样做的文件,但只合并其他剩余的文件。 所以,我想把这些文件拿回来,这可能吗? 谢谢 :)
编辑我想撤消混帐澄清。 看到一些答案后,我做到了
git reflog bb3139b... HEAD@{0}: pull : Fast forward 01b34fa... HEAD@{1}: clone: from ...name...
现在,我该怎么办? 做git reset --hard
好的? 我不想再拧它,所以要求详细的步骤?
git pull
会做两件事:它做一个git fetch
,然后一个git merge
,合并分支,这些分支已经被设置为在你的configuration中被合并。
所以你想要做的就是撤销合并(撤销抓取没有什么意义,也不需要)。
要做到这一点,你可以尝试使用git reset --hard
重置到以前的状态。 使用git-reflog命令查找先前状态的SHA-1,然后重置为它。
和jkp的答案一样,但是下面是完整的命令:
git reset --hard a0d3fe6
a0d3fe6在这里被发现
git reflog
并看看你想撤消的点。
一种更现代的撤销合并的方式是:
git merge --abort
而稍微老一点的方法:
git reset --merge
在以前的答案中描述的老派方式(警告:将放弃所有您的本地更改):
git reset --hard
但实际上,值得注意的是, git merge --abort
只相当于git reset --merge
因为MERGE_HEAD
存在。 这可以在合并命令的git帮助中读取。
git merge --abort is equivalent to git reset --merge when MERGE_HEAD is present.
合并失败后,当没有MERGE_HEAD
,可以用git reset --merge
取消失败的合并,但不一定要用git merge --abort
, 所以它们不仅仅是旧的和新的语法 。 这就是为什么我发现git reset --merge
在日常工作中更加有用。
如果你有gitk(尝试从你的git命令行运行“gitk –all”),这很简单。 只要运行它,select你想要回滚的提交(右键单击),并select“重置主分支到这里”。 如果您没有无限制的更改,请select“硬”选项。
它首先使用: git reflog
find你以前的状态SHA,并且(HEAD @ {1}就是一个例子)
git reset --hard HEAD@{1}
假设$COMMIT
是执行git pull
之前的最后一个提交id。 你需要撤消最后一次拉
git reset --hard $COMMIT
。
奖金:
在谈到拉,我想分享一个有趣的伎俩,
git pull --rebase
这个命令是我的git生命中最有用的命令,它节省了大量的时间。
在推送新服务器之前,请尝试使用此命令,它会自动同步最新的服务器更改(使用fetch + merge),并将您的提交置于git log顶部。 无需担心手动拉/合并。
你可以做git reset --hard ORIG_HEAD
因为在执行这些操作之前,“pull”或“merge”将ORIG_HEAD设置为当前状态。
尝试下面这个命令。 希望它能解决你的问题。
git reset --keep HEAD@{1}
注意: ORIG_HEAD
是HEAD的前一个状态,由具有可能危险行为的命令设置,以便于恢复它们。 Git有reflog的用处不大: HEAD@{1}
大致等于ORIG_HEAD (HEAD@{1}
总是HEAD的最后一个值, ORIG_HEAD
是危险操作之前HEAD的最后一个值)