如何撤消'git fetch'
我刚刚添加额外的remote A
到我的repo B
,然后运行git fetch A
如何撤消抓取? 如果我只是删除remote A
: git 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]