当git注释中存在合并冲突时合并它们

max*_*bin 8 git

我做了以下几点来合并Git笔记.
参考:http ://vmiklos.hu/blog/git-notes-merge

我克隆了一个repo,添加了对commit的引用(refs/notes/commits).当我推送它时,中央仓库拒绝它,因为它是非快速前进 - 因为已经存在该提交对象的refs/notes/commit.因此,为了将远程Notes引用合并到我的本地Notes引用,

  1. git checkout refs/notes/master
  2. git fetch refs/notes/commit
  3. git merge FETCH_HEAD
    自动合并206155715a78c9d91d42cda1de98449d2e0b1d36
    CONFLICT(add/add):合并冲突206155715a78c9d91d42cda1de98449d ........
    自动合并失败; 修复冲突,然后提交结果.
  4. vi 206155715a78c9d91d42cda1de98449d ........ [手动修复冲突]
  5. git add 206155715a78c9d91d42cda1de98449d ........
  6. git commit -m"updated Notes"
    [已分离的HEAD 0afb80f]更改了备注
  7. git update-ref refs/notes/commits HEAD
  8. git checkout master
    上一个HEAD位置是0afb80f ...已更改注释
    切换到分支'master'
  9. git push origin refs/notes/commit
    成功

问题是,这是否是最好的方法呢?

在git notes man page之后,我尝试了以下内容.

  1. git fetch refs/notes/commit
  2. git notes merge -v refs/notes/commits
    无需更新!

以上步骤显然对我有用.有没有办法使用git notes merge命令并合并Notes,而不是第一个插图中所示的"分支方法"?对于我的用户来说,这个简单的命令会更有帮助.

Ada*_*ers 7

正如我在评论中已经提到的那样,第一种方法不适合你的一个原因是你错误地复制了指令:你的第二步git fetch refs/notes/commits是缺少遥控器的名称.

关于第二种方法git notes merge,再次你犯了同样的错误,错过了遥控器git fetch.但即使有了这个问题,我仍然努力让它发挥作用,直到我终于弄清楚你必须在合并之前将遥控器中的音符提取到另一个ref命名空间,因为如果存在冲突,它将不会让你覆盖什么当地refs/notes/commits指向(如果没有冲突,它会愉快地快进).

这对我有用:

git fetch origin refs/notes/commits:refs/notes/origin/commits
git notes merge -v origin/commits
Run Code Online (Sandbox Code Playgroud)

如果存在冲突,它现在将告诉您编辑.git/NOTES_MERGE_WORKTREE然后通过提交结果git notes merge --commit,或者中止合并git notes merge --abort.

使用的一个大缺点git notes merge技术建议在URL上面的是,合并不提供任何指标,所以你不能使用你的正常工作流程合并通过git mergetool等.另一个原因是,它不支持垫底.因此,如果您期望复杂的冲突或需要重新调整,那么我建议采用这种git checkout refs/notes/commits方法.但在简单的情况下,git notes merge可能更方便,因为您可以在工作树变脏时执行合并,而git checkout refs/notes/commits要求它是干净的.

我很确定git-notes(1)手册页可以让这一切变得更加明显.也许我会找一些时间来提交补丁.然而,与此同时,我编写了一个新的包装器git-rnotes,它可以更容易地与远程存储库共享注释.