无法 git 合并,因为 git commit --amend
Cannot git merge because git commit --amend
在 master 分支中,我有 Initial Commit pushed 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
请注意分支名称 master
和 branchA
select 如何提交 b89218d
,这是我的初始提交。
现在,如果我进行 new 初始提交:
$ 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
这个新提交有一个新的哈希 ID,c982f45
(你的提交不会有这个哈希 ID,因为这取决于我的名字,我的电子邮件地址,我电脑上的日期和时间,等等)。但是 first 根仍然存在,并且 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
A 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
您可以通过添加 --allow-unrelated-histories
选项强制 git merge
尝试合并,就像以前版本的 Git 一样。然而,如果没有很好地理解 git merge
,这很少是一个好主意。在我构建的示例中,它有效。如果它对你有用并且做你想做的,那很好,但要确保它真的是你想要的。
在 master 分支中,我有 Initial Commit pushed 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
请注意分支名称 master
和 branchA
select 如何提交 b89218d
,这是我的初始提交。
现在,如果我进行 new 初始提交:
$ 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
这个新提交有一个新的哈希 ID,c982f45
(你的提交不会有这个哈希 ID,因为这取决于我的名字,我的电子邮件地址,我电脑上的日期和时间,等等)。但是 first 根仍然存在,并且 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
A 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
您可以通过添加 --allow-unrelated-histories
选项强制 git merge
尝试合并,就像以前版本的 Git 一样。然而,如果没有很好地理解 git merge
,这很少是一个好主意。在我构建的示例中,它有效。如果它对你有用并且做你想做的,那很好,但要确保它真的是你想要的。