繁体   English   中英

Git 在远程强制推送后获取笔记

[英]Git fetch notes after forced push on the remote

我找到了很多关于如何使本地分支看起来像远程分支的答案,但就我而言,我需要接受强制推送到远程的更改refs/notes/commits

更改是使用git notes add进行的。 使用git push origin refs/notes/* -f更新了遥控器。

我在本地有不同的refs/notes/commits历史记录。 到目前为止,我一直在使用git fetch origin "refs/notes/*:refs/notes/*"将远程笔记更改集成到我的本地。 在强行推动下,这两个历史现在脱节了。 我想扔掉我的,接受他们的。

由于refs/notes/commits不是分支(对吗?)我不能使用git pushgit checkout进入它然后git reset (再次,对吗?)。 那么,我可以使用什么来使我的本地refs/notes*等同于远程refs/notes/*

确实refs/notes/commits不是branch ,因为根据定义,所有分支名称都以refs/heads/开头。 但是, git fetchgit push可以与任何引用名称一起使用,您可以强制获取和强制推送。 所以:

到目前为止,我一直在使用git fetch origin "refs/notes/*:refs/notes/*"将远程笔记更改集成到我的本地。 在强行推动下,这两个历史现在脱节了。 我想扔掉我的,接受他们的。

那将是强制获取。 要强制获取,请执行与git push相同的操作:添加--force标志,或在refspec (由冒号分隔的一对名称)前加上加号。 后者更短(至少一个字符),所以我将在这里使用: 1

git fetch origin "+refs/notes/*:refs/notes/*"

或者:

git fetch origin "+refs/notes/commits:refs/notes/commits"

这将用获取的值覆盖您的refs/notes/commits的当前值(存储的 hash ID),前提是它们有refs/notes/commits 带有*的变体将用他们的覆盖您所有refs/notes/名称(创建他们之前没有的任何名称)。


1请注意,refspec 前面的+为该refspec 设置强制标志,而命令行上的--force所有refspec 设置强制标志。 那是:

git fetch origin refs/heads/br1:refs/heads/br1 +refs/heads/br2:refs/heads/br2

不强制从原点的分支br1获取到(本地)分支br1 ,但强制从原点的br2获取br2 与之比较:

git fetch --force origin refs/heads/br1:refs/heads/br1 refs/heads/br2:refs/heads/br2

这会强制更新。 即使 Git 的正常规则会拒绝更新,强制更新也会简单地发生。 2个

2对于git push ,另一端可以添加额外的非 Git 规则 例如,这就是 GitHub 和其他人提供“受保护分支”的方式。 由于这些不是 Git 的常规规则,-- --force+标志不会覆盖这些规则。 git fetch没有任何等效项,因为它在您自己的存储库中,并且假定您知道自己在做什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM