有没有办法"unfetch"笔记?
Is there a way to "unfetch" notes?
上下文:
我们正在使用 gerrit,我错过了为一些 gerrit 变更集添加 主题。
一个人建议做一个 git fetch origin "refs/notes/*:refs/notes/*"
,然后“编辑”评论笔记并推迟结果。事实证明:我们的权限已设置,因此我可以获取笔记,但不能推送它们。但是有权推动此类更改的人修复了需要修复的条目,所以我在这方面没问题。
出于好奇,我今天又做了git fetch origin "refs/notes/*:refs/notes/*"
,得到了
remote: Counting objects: 333792, done
...
Resolving deltas: 100% (103/103), completed with 44 local objects.
From ssh://whatever....
! [rejected] refs/notes/review -> refs/notes/review (non-fast-forward)
这就像我第一次获取“笔记”,我猜想:我在本地真的不需要那些信息。
因此:
- 有没有办法“删除”获取的内容?
- 如果不是,我如何强制我的本地存储库忘记我在本地对“注释”所做的更改?
您可以:
- 完全删除您的
refs/notes/review
引用;
- 保持原样(可能没有理由这样做);或
- force-update 您自己的
refs/notes/review
来自他们的 refs/notes/review
,以便始终拥有最新的。
正在删除您的笔记
其中第一个实现了您的第一个要点。为此,只需 运行:
git update-ref -d refs/notes/review
正在更新您的笔记
最后一个实现了你的第二个要点。为此,运行:
git fetch origin +refs/notes/review:refs/notes/review
或:
git fetch --force origin refs/notes/review:refs/notes/review
这是你第一次做的,除了设置了“强制”标志,告诉你自己的 Git 从他们的更新你的,即使这会丢失你在本地所做的工作。
要在每个 git fetch origin
上执行此操作,您可以执行以下操作之一。我的首选方法是在我的编辑器中打开 .git/config
(git config --edit
会这样做)。你会发现,在这个配置文件中,有些行是这样的形式:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
(还会有一个url
设置。)
这条fetch
行告诉你的Git:每次我连接到origin
,默认情况下,我想要你,我的Git,获取他们所有的 refs/heads/*
名称——他们所有的分支名称——并将它们用于 force-update 我自己的 refs/remotes/origin/*
名称。 这就是你的 remote-tracking 名称工作。
添加 second fetch =
行:
fetch = +refs/notes/review:refs/notes/review
告诉你的 Git: 然后,从他们的 refs/heads/*
更新了我的 refs/remotes/origin/*
,也从他们的 force-update 我的 refs/notes/review
refs/notes/review
.
您可以有任意多的 fetch
行。您可以使用它们来实现奇特的技巧,例如将其他笔记带入并重命名它们。
上下文:
我们正在使用 gerrit,我错过了为一些 gerrit 变更集添加 主题。
一个人建议做一个 git fetch origin "refs/notes/*:refs/notes/*"
,然后“编辑”评论笔记并推迟结果。事实证明:我们的权限已设置,因此我可以获取笔记,但不能推送它们。但是有权推动此类更改的人修复了需要修复的条目,所以我在这方面没问题。
出于好奇,我今天又做了git fetch origin "refs/notes/*:refs/notes/*"
,得到了
remote: Counting objects: 333792, done
...
Resolving deltas: 100% (103/103), completed with 44 local objects.
From ssh://whatever....
! [rejected] refs/notes/review -> refs/notes/review (non-fast-forward)
这就像我第一次获取“笔记”,我猜想:我在本地真的不需要那些信息。
因此:
- 有没有办法“删除”获取的内容?
- 如果不是,我如何强制我的本地存储库忘记我在本地对“注释”所做的更改?
您可以:
- 完全删除您的
refs/notes/review
引用; - 保持原样(可能没有理由这样做);或
- force-update 您自己的
refs/notes/review
来自他们的refs/notes/review
,以便始终拥有最新的。
正在删除您的笔记
其中第一个实现了您的第一个要点。为此,只需 运行:
git update-ref -d refs/notes/review
正在更新您的笔记
最后一个实现了你的第二个要点。为此,运行:
git fetch origin +refs/notes/review:refs/notes/review
或:
git fetch --force origin refs/notes/review:refs/notes/review
这是你第一次做的,除了设置了“强制”标志,告诉你自己的 Git 从他们的更新你的,即使这会丢失你在本地所做的工作。
要在每个 git fetch origin
上执行此操作,您可以执行以下操作之一。我的首选方法是在我的编辑器中打开 .git/config
(git config --edit
会这样做)。你会发现,在这个配置文件中,有些行是这样的形式:
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
(还会有一个url
设置。)
这条fetch
行告诉你的Git:每次我连接到origin
,默认情况下,我想要你,我的Git,获取他们所有的 refs/heads/*
名称——他们所有的分支名称——并将它们用于 force-update 我自己的 refs/remotes/origin/*
名称。 这就是你的 remote-tracking 名称工作。
添加 second fetch =
行:
fetch = +refs/notes/review:refs/notes/review
告诉你的 Git: 然后,从他们的 refs/heads/*
更新了我的 refs/remotes/origin/*
,也从他们的 force-update 我的 refs/notes/review
refs/notes/review
.
您可以有任意多的 fetch
行。您可以使用它们来实现奇特的技巧,例如将其他笔记带入并重命名它们。