撤消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顶部。 无需担心手动拉/合并。

http://gitolite.com/git-pull-rebase查找详细信息;

你可以做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的最后一个值)