繁体   English   中英

无法 git 合并,因为 git 提交 --amend

[英]Cannot git merge because git commit --amend

在 master 分支中,我推送了Initial Commit gitlab

之后,我创建了一个名为“branchA”的新分支

我将初始提交重命名为

git commit --amend -am Initial Commit v2

并做一些修改并提交它

在这个例子中,你可以看到类似的东西

master :
    - Initial Commit
branchA :
    - Initial Commit v2
    - Commit number 2
    - ....

我想将 branchA 合并到 master 我该怎么做?

您没有重命名初始提交。 相反,您做了一个新的、不同的初始提交 您现在有两个初始提交:

$ mkdir tworoots
$ cd tworoots
$ git init
Initialized empty Git repository in ...
$ echo example of multiple roots > README
$ git add README && git commit -m 'first root'
[master (root-commit) b89218d] first root
 1 file changed, 1 insertion(+)
 create mode 100644 README
$ git branch branchA
$ git log --all --decorate --oneline --graph
* b89218d (HEAD -> master, branchA) first root

请注意分支名称masterbranchA select 如何提交b89218d ,这是我的初始提交。

现在,如果我进行的初始提交:

$ echo forgot something > afile
$ git add afile
$ git commit --amend -m "second root"
[master c982f45] second root
 Date: Thu Feb 4 02:27:37 2021 -0800
 2 files changed, 2 insertions(+)
 create mode 100644 README
 create mode 100644 afile

这个新的提交有一个新的 hash ID, c982f45 (你的提交不会有这个 hash ID,因为这取决于我的名字,我的 Z0C83F57C786A0B4A39EFAB23731C7EB 地址,等等) 但是第一个根仍然存在, branchA仍然找到它:

$ git log --all --decorate --oneline --graph
* c982f45 (HEAD -> master) second root
* b89218d (branchA) first root

从这个特定的图表(由于--oneline选项)很难看出这两个提交是完全不相关的。 运行相同的git log命令但没有--oneline并注意提交之间没有连接线,以查看。

如果我们现在git checkout branchA并进行更多提交,他们将branchA的根提交作为他们的(单个)根提交:

$ git checkout branchA
Switched to branch 'branchA'
$ echo data go in files and the files go in commits > datafile
$ git add datafile
$ git commit -m 'add some data'
[branchA 12fe86a] add some data
 1 file changed, 1 insertion(+)
 create mode 100644 datafile

带有我们其他常用选项的git log ,但这次没有--all ,表明master的提交与这些提交无关:

$ git log --decorate --oneline --graph
* 12fe86a (HEAD -> branchA) add some data
* b89218d first root

尝试合并这两个不相交的子图会产生错误(自 Git 2.9 起):

$ git checkout master
Switched to branch 'master'
$ git merge branchA
fatal: refusing to merge unrelated histories

您可以强制git merge尝试合并,就像以前版本的 Git 一样,通过添加--allow-unrelated-histories选项。 但是,如果对git merge没有很好的了解,这很少是一个好主意。 在我构建的示例中,它可以工作。 如果它对您有用并且可以满足您的需求,那很好,但请确保它确实是您想要的。

暂无
暂无

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

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