GIT合并--no-ff

时间:2017-04-25 09:02:17

标签: linux git merge fast-forward

在这篇文章中,我将有一位Git专家尝试解释git merge -no-ff如何帮助我们。我在这里读过http://nvie.com/posts/a-successful-git-branching-model/(我个人发现这是一个非常好的帖子)git merge --no-ff:“这可以避免丢失有关功能分支历史存在的信息,并将所有提交组合在一起添加了功能“。所以我发现它非常有用并且做了一些实验。

问题在于如何从git日志信息中了解哪些提交属于每个功能。为此我做了下一个实验。假设两个用户正在开发一个软件项目两个不同的独立功能(以避免合并冲突)。从上一个稳定版本开始,我们将按此进行:

git init touch AAA.txt git add AAA.txt git commit -m "My stable software version" //this will simulate our project repository

因此,从这一点开始,两个用户(名称Alice和Bob)创建两个不同的分支并开始处理这些功能:

git branch feature1_Alice git branch feature2_Bob 现在爱丽丝和鲍勃开始工作并同时提交。我们可以模拟他的:

git checkout feature1_Alice touch f1_A1.txt git add f1_A2.txt git commit -m "Solving little bug on feature 1" 在Alice执行此操作后,Bob会按照时间线执行两次提交:

git checkout feature2_Bob touch f2_B1.txt git add f2_B1.txt git commit -m "Starting feature 2" touch f2_B2.txt git add f2_B2.txt git commit -m "feature 2: implementing new functionality" 然后爱丽丝完成了功能:

git checkout feature1_Alice touch f2_A3.txt git add f2_A3.txt git commit -m "Feature 1 finished"

然后Bob完成feature2:

git checkout feature2_Bob touch f1_A3.txt git add f1_A3.txt git commit -m "Feature 2 finished"

现在我们将新功能合并到主分支:

git checkout master git log 输出:

提交c58dd35054f83c089292d090781438f37feeffa3

作者:Juan

日期:4月25日星期二10:30:01 2017 +0200

My stable software version

git merge --no-ff feature1_Alice //We put a message on the created commit

现在git log输出:

提交50c5d1570fe0c047f72200bd57ef6cef6fa9077e 合并:c58dd35 c136a23 作者:胡安 日期:星期二4月25日10:48:12 2017 +0200

Merging feature 1 to main
Merge branch 'feature1_Alice'

提交c136a23c49c546e5f48d9d0634e9bc51d67370cd 作者:胡安 日期:星期二4月25日10:41:49 2017 +0200

Feature 1 finished

提交c9dbb1b49444555fca528f562d3a38143fd521e9 作者:胡安 日期:星期二4月25日10:35:24 2017 +0200

Solving little buf on feature 1

提交58afad2b46565e614a99d94d1e1aa1c8520f9f2b 作者:胡安 日期:4月25日星期二10:35:01 2017 +0200

Starting feature 1

commit c58dd35054f83c089292d090781438f37feeffa3 作者:胡安 日期:4月25日星期二10:30:01 2017 +0200

My stable software version

最后合并功能2:

git merge --no-ff feature2_Bob git log 提交3f27f78fefb30080ace629e561a242a4f8dbca56 合并:50c5d15 2eee0c1 作者:胡安 日期:星期二4月25日10:54:20 2017 +0200

Merging feature 2 to master
Merge branch 'feature2_Bob'

提交50c5d1570fe0c047f72200bd57ef6cef6fa9077e 合并:c58dd35 c136a23 作者:胡安 日期:星期二4月25日10:48:12 2017 +0200

Merging feature 1 to main
Merge branch 'feature1_Alice'

提交2eee0c1bb732443ae7d6f4893d651abfd558d55a 作者:胡安 日期:星期二四月二十五日10:43:14 2017 +0200

Feature 2 finished

提交c136a23c49c546e5f48d9d0634e9bc51d67370cd 作者:胡安 日期:星期二4月25日10:41:49 2017 +0200

Feature 1 finished

提交cd3bee2906e02df22866ba710891d21eaebb8013 作者:胡安 日期:星期二4月25日10:40:12 2017 +0200

feature 2: implementing new functionality

提交c6fdf092b2645f7d4088f9f439e820a9a820b891 作者:胡安 日期:4月25日星期二10:37:39 2017 +0200

Starting feature 2

提交c9dbb1b49444555fca528f562d3a38143fd521e9 作者:胡安 日期:星期二4月25日10:35:24 2017 +0200

Solving little buf on feature 1

提交58afad2b46565e614a99d94d1e1aa1c8520f9f2b 作者:胡安 日期:4月25日星期二10:35:01 2017 +0200

Starting feature 1

commit c58dd35054f83c089292d090781438f37feeffa3 作者:胡安 日期:4月25日星期二10:30:01 2017 +0200

My stable software version

任何人都可以告诉我如何从提交历史和合并提交中看到哪些提交会影响每个功能?当我们及时插入来自不同功能(或来自功能和主控)的备用提交时,我无法看到该网络中评论的优势。

使用--no-ff的唯一区别是合并提交具有已合并的提交信息,但这对于跟踪提交历史记录是不合适的。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以使用git log --graph --oneline --decorate --all查看您的存储库图表,或者只需致电gitk即可查看您的历史记录。由简单git log提供的线性文字版本不会显示您正在寻找的信息。

在查看图表表示时,合并提交确保您可以看到两个分支相遇的位置,而快进合并会导致不同的分支显示为线性,尽管它们是并行开发的。