git pull总是打开一个新的提交窗口

时间:2018-04-30 09:41:53

标签: git github

我正面临着与git的混淆,我的git基础知识搞砸了。

我正在使用master分支并进行了一些更改并执行了git add + git commit 之后我做了一个 git pull,现在我感到困惑,因为每当我做一个git pull我都会得到一个新的提交窗口。

每当我执行上述步骤时,提交消息永远不会出现,它会自动与远程源合并。

现在每当我使用远程原点执行git pull时,会弹出新的提交窗口。

有些东西搞砸了,但我无法搞清楚。

请帮助。

这是git日志,对我来说很奇怪。

每当我做一个git pull时,第一次提交就会显示出来。 除非我搞砸了什么,否则不应该发生这种情况。 请帮助我理解什么搞砸了。

commit e5dac0fbd72f17d87c9ec2090f29b603b399088f (HEAD -> master)
Merge: b44d245 f407e5b
Author: Abhi
Date:   Mon Apr 30 02:32:32 2018 -0700

    Merge branch 'master' of https://github.com/networks/test_automation

commit b44d245400b72a994ff57f0ac2a5db7b75964266
Author: Abhi
Date:   Mon Apr 30 01:51:48 2018 -0700

    Test cases for the remote EP feature.

    Add test cases for pod traffic between same uplink, different uplink
    Add test cases for creating multiple EPG and assiging pods to EPG
    and checking the connectivity between them

commit f407e5bcae8a798a84e28d275432a324889523f8 (origin/master, origin/HEAD)
Author: Ceridwen 
Date:   Fri Apr 20 16:40:31 2018 -0700

    Use acikubectl to write the cluster-report to a file

commit 8b0084c6ca9df913a05f6c910d923621032ea0d2

2 个答案:

答案 0 :(得分:0)

不幸的是,我认为我认为默认的git log不会向您显示您可能需要了解的内容。

我建议使用像gitk这样的工具或制作一个bash别名,例如: alias glog="git log --all --graph --pretty=oneline --decorate=short --abbrev-commit" 然后使用它来更好地了解推/拉/合并/提取实际上做了什么。

请记住,origin / master是远程分支。执行git clone的任何人都会看到该分支。 master本地分支。只有您实际上会看到master分支中发生的情况。当您将master推送到origin时,origin/master将会根据您的提交进行更新。

但是,git push origin master只有在您已经推送了最新的origin/master时才会成功。在这种情况下,我认为有人在您的最新origin/master和您的git pull之间推送了git commit,这意味着您的masterorigin/master不同步当你提交时。这看起来像这样:

master origin/master | / B-----/ | A

此处,AB是您同时看到的提交,因为您和您的同事都已完成了git pull并获取了AB 。然后,您的同事在您提交之前将新提交推送到origin/master,而您尚未提取该提交。因此,masterorigin/master都直接基于B。

执行git pull时,git会看到这一点并尝试合并两个提交。在你的情况下它成功了(万岁,否则我们会有一个完全不同的问题)。您git pull的结果将是:

master | \ C origin/master | / B-----/ | A

在这里,C是您以前的主人。由于Corigin/master不是顺序的,因此git必须执行合并并为此创建合并提交。这就是您在git log中看到的内容。

为什么在之前的git pull中没有看到这个?好。如果masterorigin/master没有分歧,例如,如果你的同事推了一些东西而你在做出自己的提交之前做了git pull,那么你的情况(拉动之前)就像是这样:

origin/master | master | B | A

在这种情况下,您不需要合并,也不会创建合并提交,因为git会看到可以执行“快进”。快进只是意味着git将向前移动master而不进行任何合并,因为分支没有分歧。这可能是你之前看到的。

一般来说,如果使用更好的可视化工具(如gitk或别名),我认为这些事情更容易看到,我更喜欢做git fetch,然后查看它,然后做git merge origin/master。就个人而言,我认为这样可以更容易理解正在发生的事情。

答案 1 :(得分:0)

感谢大家的帮助。

以防万一有人想知道我是如何解决的;我使用了git pull --rebase,它可以在不创建新提交的情况下工作。