git如何将没有变化的分支合并到master分支?
How to merge the branch with no changes into master branch in git?
对git分支和合并有基本的疑问。
一个分支是否可以在不做任何更改的情况下合并到 master 中。如果是这样,master 和 branch 之间存在的 delta 变化会发生什么变化。这会被主分支更改覆盖吗?参考以下场景:
我有两个分支 master 和 BugBranch。
第 1 步:
C--B--A (master)
|
X (branch)
从 master 那里拿了一个分支说 BugBranch 。
现在我有一个文件 TestMerge.java.
public static void main(String[] args){
...
...
callSomeMethod();
switch(decision)
{
case A:
do_something
break;
case B:
do_something
break;
}
}
所以在第 1 步,master 和 BugBranch 看起来都一样。
第 2 步:
文件(TestMerge)在 master 中更改如下。 (刚去掉开关)
public static void main(String[] args){
...
...
callSomeMethod();
}
C--B--A--1 (master)
|
X (branch)
第 3 步:
问题是当我尝试将分支与 master 合并时。预计文件中存在合并冲突,因为肯定存在增量并且希望保留 BugBranch 中的更改。但奇怪的是,它被master改变覆盖了。
尝试了以下命令
git checkout master
git merge BugBranch
这真是令人困惑!
A Git 分支只是指向提交的指针。您问题中的 X
分支指向提交 A
并且对于许多 Git 操作,可以使用 X
代替 A
反之亦然,您得到同样的结果。
仅通过创建,Git 分支不会在存储库中产生任何更改。在您对文件进行一些更改并提交它们之前,该分支不会偏离其源分支(在您的情况下为 master
)。
您更改了一些文件并在 master
上提交(提交 1
)。如果您没有在分支 X
上更改和提交任何内容,它仍然指向分支 1
历史记录中的提交 A
(实际上,它是它的父级)。
当您想将分支X
提交到分支master
时,Git检测到分支X
在分支master
的过去;从 master
开始,如果 Git 反复从一个提交跳转到其父项之一,它可以到达分支 X
指向的提交(即 A
提交)。
这意味着分支 X
不包含分支 master
中尚未包含的任何内容。换句话说,没有要合并的内容,Git 通过消息 "Already up-to-date.".
通知您这种情况
另一方面,如果你想将master
合并到X
,因为master
是X
的未来,Git转换合并操作为 "fast-forward" 操作。这意味着,它不会创建不必要的新合并提交,只是将 X
分支(你合并到的分支)向前推,直到它到达 master
提交(你合并的分支)。
您可以通过在 git merge
命令行中使用 --no-ff
标志来强制 Git 创建合并提交,但是,除了非常特殊的情况,您没有任何这样做的理由。它产生一个不会在文件中引入任何更改的提交。
对git分支和合并有基本的疑问。 一个分支是否可以在不做任何更改的情况下合并到 master 中。如果是这样,master 和 branch 之间存在的 delta 变化会发生什么变化。这会被主分支更改覆盖吗?参考以下场景:
我有两个分支 master 和 BugBranch。
第 1 步:
C--B--A (master)
|
X (branch)
从 master 那里拿了一个分支说 BugBranch 。 现在我有一个文件 TestMerge.java.
public static void main(String[] args){
...
...
callSomeMethod();
switch(decision)
{
case A:
do_something
break;
case B:
do_something
break;
}
}
所以在第 1 步,master 和 BugBranch 看起来都一样。
第 2 步: 文件(TestMerge)在 master 中更改如下。 (刚去掉开关)
public static void main(String[] args){
...
...
callSomeMethod();
}
C--B--A--1 (master)
|
X (branch)
第 3 步: 问题是当我尝试将分支与 master 合并时。预计文件中存在合并冲突,因为肯定存在增量并且希望保留 BugBranch 中的更改。但奇怪的是,它被master改变覆盖了。
尝试了以下命令
git checkout master
git merge BugBranch
这真是令人困惑!
A Git 分支只是指向提交的指针。您问题中的 X
分支指向提交 A
并且对于许多 Git 操作,可以使用 X
代替 A
反之亦然,您得到同样的结果。
仅通过创建,Git 分支不会在存储库中产生任何更改。在您对文件进行一些更改并提交它们之前,该分支不会偏离其源分支(在您的情况下为 master
)。
您更改了一些文件并在 master
上提交(提交 1
)。如果您没有在分支 X
上更改和提交任何内容,它仍然指向分支 1
历史记录中的提交 A
(实际上,它是它的父级)。
当您想将分支X
提交到分支master
时,Git检测到分支X
在分支master
的过去;从 master
开始,如果 Git 反复从一个提交跳转到其父项之一,它可以到达分支 X
指向的提交(即 A
提交)。
这意味着分支 X
不包含分支 master
中尚未包含的任何内容。换句话说,没有要合并的内容,Git 通过消息 "Already up-to-date.".
另一方面,如果你想将master
合并到X
,因为master
是X
的未来,Git转换合并操作为 "fast-forward" 操作。这意味着,它不会创建不必要的新合并提交,只是将 X
分支(你合并到的分支)向前推,直到它到达 master
提交(你合并的分支)。
您可以通过在 git merge
命令行中使用 --no-ff
标志来强制 Git 创建合并提交,但是,除了非常特殊的情况,您没有任何这样做的理由。它产生一个不会在文件中引入任何更改的提交。