Git获取和重置不按预期工作

时间:2016-06-11 16:30:41

标签: git

一个队友在master中做了一些修复,我正试图将我的分支(feature / me / foo,在0f0后有三个提交)重新绑定到它上面。

如果我只是改变,那么三方合并会破坏我所有的变化(在他改变的三个文件中)。所以我找到了这个甜蜜的命令:

$ git rebase -s ours master

除了它根本不是我想要的:

$ git log

commit 20dee42d3e7c06f94618d4e39e84bc07ad2aff9f 
Author: [him] 
Date:   Fri Jun 10 14:09:35 2016 -0700

commit 0f0dac94a0094817a3191f699b1b438ec89aaec2 
Author: [me] 
Date:   Fri Jun 10 09:14:47 2016 -0700

我的最后三次提交(0f0之后)消失了,并被他的替换。没问题。我只想恢复:

( feature/me/foo ) 11:16:35 > git fetch --all 
Fetching origin no slots

( feature/me/foo ) 11:16:45 > git reset --hard 
feature/me/foo HEAD is now at 20dee42 + minor updates:

...除了我仍然指着他的变化,而不是我分支的最新消息。如果我核实并克隆,我会回到我的分支上的正确状态。

将我的分支“硬重置”到远程状态的正确方法是什么?

3 个答案:

答案 0 :(得分:0)

使用遥控器硬重置分支:

git checkout another-branch
git checkout /remotes/origin/master
git branch -D master
git checkout master

想法是移动到另一个分支,移动到远程refence,删除master,最后crear一个链接到远程分支的新主分支。

这不是一个好习惯,但可能会解决您的问题。

答案 1 :(得分:0)

尝试在reflog中找到您想要提交的SHA并重置为它。

git reflog # find SHA or short name, for example 0f0dac94
git reset --hard 0f0dac94

答案 2 :(得分:0)

如果你的分支有上游设置,那么只需

git reset --hard @{u}

@{u}@{upstream}表示“当前分支的上游”。)

否则,请使用远程分支名称:

git reset --hard origin/branch_name