git - 当其中存在 merge 冲突时 merge git 注释

标签 git

我做了以下 merge Git 笔记的操作。
引用:http://vmiklos.hu/blog/git-notes-merge

我克隆了一个 repo,添加了对提交的注释引用 (refs/notes/commits)。当我推送它时,中央 repo 拒绝它,因为它不是快进的 - 因为已经有该提交对象的 refs/notes/commits。因此,为了将远程 Notes 引用 merge 到我的本地 Notes 引用,

  1. git checkout refs/notes/master
  2. git fetch refs/notes/commits
  3. git merge FETCH_HEAD
    Auto-merging 206155715a78c9d91d42cda1de98449d2e0b1d36
    CONFLICT (add/add): Merge conflict in 206155715a78c9d91d42cda1de98449d........
    Automatic merge failed; fix conflicts and then commit the result.
  4. vi 206155715a78c9d91d42cda1de98449d........ [fix the conflict as usual manually]
  5. git add 206155715a78c9d91d42cda1de98449d........
  6. git commit -m "updated Notes"
    [detached HEAD 0afb80f] changed notes
  7. git update-ref refs/notes/commits HEAD
  8. git checkout master
    Previous HEAD position was 0afb80f... changed notes
    Switched to branch 'master'
  9. git push origin refs/notes/commits
    success

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

按照 git notes 手册页,我尝试了以下操作。

  1. git fetch refs/notes/commits
  2. git notes merge -v refs/notes/commits
    Nothing to Update!

上述步骤显然对我有用。有没有一种方法可以使用 git notes merge 命令并 merge 注释,而不是第一个插图中所示的“分支方法”?对于我的用户,这个简单的命令会更有帮助。

最佳答案

正如我在评论中提到的,第一种方法对您不起作用的一个原因是您复制了错误的说明:您的第二步 git fetch refs/notes/commits 缺少 Remote 的名称。

关于 git notes merge 的第二种方法,您再次犯了同样的错误,即从 git fetch 中丢失了远程。但即使有了这个修复,我还是努力让它工作,直到我最终发现你必须在 merge 之前从远程获取笔记到不同的 ref 命名空间,因为如果有冲突它不会让你覆盖什么本地 refs/notes/commits 指向(尽管如果没有冲突它会愉快地快进)。

所以这对我有用:

git fetch origin refs/notes/commits:refs/notes/origin/commits
git notes merge -v origin/commits

如果有冲突,它现在会告诉你编辑 .git/NOTES_MERGE_WORKTREE 然后通过 git notes merge --commit 提交结果,或者中止 merge 使用 git notes merge --abort

the technique suggested in the URL above 上使用 git notes merge 的一大缺点是 merge 不提供任何索引,因此您不能通过 git mergetool 等使用正常的 merge 工作流程。另一个是它不支持 rebase 。因此,如果您预计会出现复杂的冲突或需要 rebase ,那么我建议您使用 git checkout refs/notes/commits 方法。但在简单的情况下,git notes merge 可能更方便,因为您可以在工作树脏时执行 merge ,而 git checkout refs/notes/commits 需要它保持清洁。

我很确定 git-notes(1) 手册页可以使这一切变得更加明显。也许我会找时间为此提交补丁。然而与此同时,我写了一个新的 wrapper called git-rnotes这使得与远程存储库共享笔记变得更加容易。

关于git - 当其中存在 merge 冲突时 merge git 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055303/

相关文章:

git - 为什么 "git push"被拒绝? ("git pull"没有帮助)

git - 当父级发生变化时,重新确定 merge 提交的基准

java - 处理多平台(dev/integ/valid/prod ...)开发的最佳解决方案是什么?发货流程

git - 从gitorious导入到github?

git - 获取 git 存储库中第一次提交的提交哈希值

git - Gitlab/Gitolite 可以强制执行正确的用户名/电子邮件吗

git - .gitignore 不排除任何文件和文件夹

git - git reset 中的歧义参数

bash - 如何压缩和忽略 .gitignore 指定的所有文件

git - GitHub Desktop 中是否存在 'git status'?