24

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

例如,假设这是我的工作流程......

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 更改,而是自己更改它,以便调试我的脚本!

4

4 回答 4

17

你要

git update-ref refs/remotes/origin/master refs/remotes/origin/master@{1}

update-ref想要它正在更新的 ref 的完整拼写,因为它的级别(远)低于尊重 ref 命名约定的命令。

于 2013-03-06T18:14:36.350 回答
2

这不是“反向 git fetch”的答案,但您的实际问题似乎是如何以编程方式“观察存储库的更改”,而不必以任何方式更改您的存储库。

为此,您可以使用git fetch --dry-run. 空运行不会对您的存储库造成任何更改,但是如果远程有更改,那么它将有一些基本的终端输出;如果没有更改,则不会有任何输出。如果您想让它作为自动脚本运行而不是手动检查,那么创建一个简单的 bash 脚本来测试git fetch --dry-run输出应该相对简单。

于 2016-12-28T15:45:00.960 回答
1

我不确定是否有一个实际的 git 命令来执行它,这是一个很大的hackish,但是......

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

应该管用

于 2013-03-06T18:10:14.830 回答
0

我希望这次我得到了你想要的,我认为是这样的:

git rebase origin/master --onto origin/master^
于 2013-03-06T18:13:23.677 回答