代码之家  ›  专栏  ›  技术社区  ›  Nick Vanderbilt

如何合并分支并保留作者身份

git
  •  14
  • Nick Vanderbilt  · 技术社区  · 15 年前

    假设我的同事约翰创建了一个名为“约翰”的分支。它有约翰的10个佣金。当谈到合并回师父,他们要求我做合并。

    我就是这么做的

    git checkout -b john origin/john
    git rebase master
    git checkout master
    git merge john --squashed
    git add .
    git commit -m 'merged branch john'
    

    但是现在发生的事情是,它是我针对合并提交的id。后来有人问我为什么要修改代码的某些部分。

    我该如何将john branch中的所有漫画折叠成一个commit,这样john就是作者。我想git commit interactive可以帮上忙,但不能完全理解。

    4 回复  |  直到 15 年前
        1
  •  9
  •   Joseph Spiros    15 年前

    问题是 git merge --squash 将应用与普通合并相同的更改,但不保留合并信息。然后,当你承诺的时候,它和你所做的任何承诺都是一样的:都是你的责任。您可以使用 git commit --author="Original Author <email@server>" . 见 git-commit(1) 有关 --author 切换。

    但我的问题是:你为什么要取消合并?为什么不做一个非挤压合并呢?如果有人 git blame ,它将适当归因于原始作者的提交。

        2
  •  8
  •   mfontani    15 年前

    如果您执行以下操作:

    git checkout -b john origin/john
    git rebase master
    git checkout master
    git merge --no-ff john # forces a merge commit to be recorded
    

    你们两个都可以保留约翰承诺书的作者身份 能够通过还原合并提交的SHA来还原合并。

        3
  •  6
  •   q9f    12 年前

    你也可以 --amend 如果你已经合并了的话,那就是作者。像这样:

    git checkout master
    git merge my_branch
    git commit --amend --author="My Nick <my.adress@email.com>"
    git push origin master
    

    这将根据需要工作,并将指定的作者添加到合并提交中。就这么简单。

        4
  •  5
  •   miracle2k    13 年前

    我刚才的方法是通过rebase挤压:

     git rebase --onto master -i master remote/branch
    

    然后在编辑器中,将所有提交标记为“挤压”。这就产生了一个附加了原始作者的单曲。尽管没有什么比把原作者复制到——作者身上更好的了。我只是觉得不舒服。

    由于某种原因,我的头后来被分离了,所以我通过:

     git checkout -B master HEAD