如何撤消'git fetch'

我刚刚添加额外的remote A到我的repo B ,然后运行git fetch A如何撤消抓取? 如果我只是删除remote Agit remote remove A1它会撤消抓取?

更新:

git remote add A path/to/A

git fetch A

以上是我运行的命令,所以在结果中我得到了所有分支到我的repo B但是我只需要一个特定的分支从repo A ,我需要它进入特定的文件夹repo B但这是另一个故事合并两个不同的代码之间的代码git存储库


您可以简单地通过删除此远程设备来撤消远程A所有提取操作:

git remote remove A

现在只需再次添加它并只抓取一个分支:

git remote add A <path/to/repository>
git fetch A <name of branch>

“撤消”一个git fetch是很困难的,但是从来没有任何理由需要撤销git fetch

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

这就是说,脚注的时间。 :-)


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

2我认为有人可能会说“磁盘空间不足”可能是导致这种情况的一个原因,尤其是如果一个大型对象被意外推送到远程并且将在下一次fetch从远程移除。 尽管如此,在一个空间不足的文件系统中工作是非常棘手的,而且我不确定除了将整个存储库移到其他地方(没有磁盘空间问题的地方)之外,我都不想做这么多事情。


这听起来像你想将你的HEAD重置为以前的版本/分支。

只要做git checkout [branch_hash_number]

链接地址: http://www.djcxy.com/p/3963.html

上一篇: How to undo 'git fetch'

下一篇: Can we recover deleted commits?