2013-03-06 92 views
22

我对git有一个透彻的理解,以及pull,fetch和merge之间的区别。我有一个遥控器,我偶尔跟踪,抓取和合并,让它说是原点/主控。我想要做的是扭转'git fetch'的行为。这听起来很愚蠢,但我想取消更新我的远程跟踪分支指向的位置,更新为旧状态,即最后一次获取之前的状态。这可能吗?反转一个git获取

例如,可以说这是我的工作流程...

git show origin/master # shows commit abc123 

git fetch    # yay i got something! 

git show origin/master # shows commit def456 

神秘命令放在这里,这样...

git show origin/master # shows commit abc123 

这是一种奇怪的东西想,但我有一个crontab监视一个git repo来检测何时可以提取,并且我遇到了调试脚本的问题,该脚本根据此行为执行了一些操作。我不想等待origin/master改变,我想自己改变它,这样我可以调试我的脚本!

+1

这不是那么奇怪......我只是提取,并得到一堆我不想要的变化,我想做同样的事情......让我的远程追踪分支指向一个旧版本回购(好像我没有取回)。我知道这些变化不在我的工作目录中......我甚至不希望他们在我的远程追踪分支上。感谢您提出这个问题并及时得到答案,以便我能够参考它: - ) – 2015-03-05 19:46:24

回答

14

你想

git update-ref refs/remotes/origin/master refs/remotes/origin/[email protected]{1}

update-ref希望在它的更新,因为它比尊重裁判命名约定的命令(多)低级别裁判的全拼。

1

我不知道,如果有一个确切的Git命令来做到这一点,这是一个很大的hackish,但...

echo $OLD_COMMIT > .git/refs/remotes/origin/master 

应该工作

0

我希望这一次我得到了什么你想和我认为这是这样的:

git rebase origin/master --onto origin/master^ 
1

这不是一个“反转git fetch”的答案,但它似乎是你的实际问题是如何以编程方式“观察变更回购”而不必以任何方式更改存储库。可以使用git fetch --dry-run。干运行不会导致您的存储库发生任何更改,但如果远程存在更改,则它将具有一些基本的终端输出;如果没有变化,则不会有任何输出。如果您希望将其作为自动化脚本运行而不是手动检查,则应该相对简单地创建一个测试git fetch --dry-run以输出的简单bash脚本。