为什么Git不推动合并?

时间:2017-08-29 18:24:44

标签: git merge push

我正在尝试合并this pull request。我执行了以下步骤(直接从Bash历史记录中获取):

git checkout -b wyattoday-fix-junk-defines master
git pull https://github.com/wyattoday/cryptopp.git fix-junk-defines
git checkout master
git merge -S --squash wyattoday-fix-junk-defines

我尝试同时使用git push origin mastergit push。在这两种情况下,Git都会返回:

$ git push origin master
Username for 'https://github.com': noloader
Password for 'https://noloader@github.com':
Everything up-to-date

所有内容都无法更新,因为我合并了补丁。更改后,我没有看到删除的代码:

$ grep WORKAROUND_MS_BUG_Q258000 *.h *.cpp
$

我确认我在上师:

$ git branch
* master
  noloader-master
  wyattoday-fix-junk-defines

为什么Git没有推动合并?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

如果您运行git status我相信您会发现您的工作副本包含与拉取请求中引入的更改匹配的分阶段更改:

On branch master    
Your branch is up-to-date with 'origin/master'.                                 

Changes to be committed:                
  (use "git reset HEAD <file>..." to unstage)                                   

        modified:   config.h            
        modified:   osrng.h

git diff --cached应显示与PR类似匹配的差异。这是因为--squash option to git merge,它实际上并没有创建新的提交(我的粗体):

  

生成工作树和索引状态,就好像发生了真正的合并(合并信息除外),但实际上没有提交,移动HEAD或记录{ {1}}(使下一个$GIT_DIR/MERGE_HEAD命令创建合并提交)。这允许您在当前分支之上创建单个提交,其效果与合并另一个分支相同(或者在章鱼的情况下更多)。

提交那些分阶段的更改,然后推送。