【问题标题】:Undo fetch command while merging branches合并分支时撤消 fetch 命令
【发布时间】:2017-09-06 11:10:25
【问题描述】:

我有两个分支 A 和 B。我想将 A 与 B 合并。我错误地运行了 git fetch 命令。我想撤消它。有什么命令可以这样做吗?

【问题讨论】:

  • 没有必要撤消任何git fetch,因为这不会影响正在处理的任何事情,它只会带来其他人的提交.
  • 为什么您认为需要撤消提取?你想解决哪个问题?
  • 您的两个分支之一AB 是远程分支吗?

标签: git github


【解决方案1】:

“撤消” git fetch 很困难 1,但没有任何理由需要撤消 git fetch。

请记住,git fetch 所做的是调用远程,获取分支名称到 SHA-1 映射的列表,带来提交和其他您需要的对象以便将它们存储在您的存储库中,然后更新您的远程- 跟踪分支,以便它们指向遥控器的当前(截至您刚刚打电话给它的时间)分支提示。这对您的任何工作树文件都没有影响,如果您明天再次运行 git fetch,那么今天完成的任何工作都可以在明天跳过。如果您确实设法撤消了提取,那么明天运行的一次将不得不重新完成今天完成的工作,所以这是一个净损失:您只是花了一些精力,以便您的 git 明天必须通过网络带来更多代码.

也就是说,是时候添加脚注了。 :-)

1如果您有远程 reflogs(您可能会这样做),这并不难:只需使用远程 reflogs 来查找在最近一次 fetch 中更新的远程跟踪分支——同样的信息也可能在 FETCH_HEAD 文件中可用——然后使用 git update-ref 将这些引用指向它们以前的 reflog 条目。但这仍然会将获取的对象留在您的存储库中,因此要真正清除它们,您还必须删除中间的 reflog 条目,然后运行 ​​git gc --prune=now,这需要非常小心并且会丢弃所有未引用的对象,而不仅仅是最近获取的对象。

2我认为有人可能会争辩说“磁盘空间不足”可能是这样做的一个原因,特别是如果一个大对象被意外推送到远程并且将在下一次提取时从远程删除。不过,在空间不足的文件系统中工作通常很棘手,我不确定除了将整个存储库移到其他地方(没有磁盘空间问题的地方)之外,我还想在这里做很多事情。

来自How to undo 'git fetch'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-17
    • 2021-06-26
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 2018-11-12
    相关资源
    最近更新 更多