2017-06-22 468 views
0

我正在使用Laravel项目并使用git-flow来管理我的更改。我的develop分支是两个提交前的功能分支我最近完成了名为功能/注册验证码。我想将这个特性分支合并到develop分支中。如何解决与composer.lock使用git流的合并冲突?

enter image description here

最近提交我做这已经被合并到开发分公司只需运行composer update更新包,其中有一个bug在里面。所以,composer.lock文件当然已被修改。

功能/注册验证码功能分支包括添加验证码包和验证码UI到注册页面。所以,这也修改了composer.lock文件。

当坐在特性分支我曾尝试合并提交,从源代码树,通过选择库> Git的流量>完成功能,然后在完成功能选择下列选项弹出:

enter image description here

我则以下消息介绍:

enter image description here

这会导致composer.lock文件中存在需要解析的合并冲突。我认为最好的方法是删除composer.lock并通过运行composer updatecomposer update --lock创建一个新的更新副本,添加unstaged composer.lock文件并提交更改。这样做了以后我提交这个样子:

enter image description here

当在命令行中运行git status我出以下几点:

c:\my-project (HEAD detached at 2a9ff12) 
λ git status 
rebase in progress; onto 3070450 
You are currently rebasing branch 'feature/registration-captcha' on '3070450'. 
    (all conflicts fixed: run "git rebase --continue") 

nothing to commit, working directory clean 

因此,我认为做正确的事情是运行git rebase --continue ,之后我收到以下消息:

c:\my-project (HEAD detached at 2a9ff12) 
λ git rebase --continue 
Applying: add non captcha to registration page 
No changes - did you forget to use 'git add'? 
If there is nothing left to stage, chances are that something else 
already introduced the same changes; you might want to skip this patch. 

When you have resolved this problem, run "git rebase --continue". 
If you prefer to skip this patch, run "git rebase --skip" instead. 
To check out the original branch and stop rebasing, run "git rebase --abort". 

如果我运行git status再次显示与上次运行git status相同的消息。

所以我现在想知道:

  • 那我在这里做,完成变基/合并吗?
  • 我是不是全都做错了?
  • 我应该如何处理更新软件包时可能产生的冲突?

任何帮助将不胜感激,谢谢!

+0

你不应该删除composer.lock,并在这种情况下做一个作曲家更新 - 从来没有!合并冲突是有原因的。在你的方法中,你现在更新了比你想要的更多的包。在这些情况下最简单的方法就是接受外国的composer.lock,扔掉你的版本。那么你需要记住你在分支中更新了哪些软件包(pro-tip:为你的更新语句创建一个git commit并在注释中写入语句)并明确运行作曲者更新。与亲技巧这一步可以自动化 –

回答

2

我是不是全都做错了?

由于git在工作流程方面非常灵活,总有不止一种方法可以做到这一点。 ;)

在这个特定情况下出现了什么问题 - 如果我正确理解了您的操作顺序 - 是您在合并完成之前开始了重新绑定,因为您想用它来解决合并冲突。这就是你如何结束独立的头部状态。

我是否应该以不同的方式更新软件包时可能出现的冲突?

如果遇到合并冲突,则处于开始合并但尚未完成的状态。它可以被中止(但没有合并)或完成(解决冲突和提交更改)。

With composer.lock我会首先尝试手动解决合并冲突,因为冲突应该非常明显:一些软件包已更新,另一个已添加 - 冲突可能是双方都改变了几行。 composer.lock是JSON格式的文件,因为您有两个可用分支的正确工作版本,应该很容易修复。也许SourceTree在这里提供了一个冲突解决工具(我不使用它),但是这也可以在文本编辑器(git marks the conflicting blocks)中或者使用MeldVimDiff等工具(可以调用git mergetool)并向您呈现3或4个文本窗口:来自两个分支的版本,具有当前状态的冲突解决窗口(在这里您进行更改)和(可选)两个分支的基本版本以及并行比较。保存它,测试它(composer install应告诉你composer.lock文件或composer validate是否有问题)。然后添加并提交 - git仍然知道提交属于合并。

在这种特定情况下(文件不是手动编辑,但是由程序员编辑,而且您知道两个分支上都做了什么),解决冲突的另一种方法是:当您处于合并中时,出现冲突,签出开发composer.lock(只是这个文件),并运行你的composer命令,添加新的包,就像你在分支中添加和添加一样。结果就像您按顺序运行更新和软件包添加一样。

我应该在这里做什么来完成rebase/merge?如果变基仍是

  • git rebase --abort

如果没有其他变化出现在你的WORKDIR或分离的头,发展也仍然在描述中的状态,我会合并重新开始正在进行

  • git merge --abort如果合并仍在进行
  • 结账开发
  • 合并特性分支再次
  • 以上述方式之一解决冲突
  • 提交合并(包括冲突解决更改),推送等
  • +0

    感谢您的详细解答。 composer.lock中的冲突约有28行左右,日期不同,基本上是该软件包的最新版本与旧版本,我在所有情况下都选择了最新版本。我进行了合并,但似乎无法与rebase一起取得进展,因此最终做了rebase skip。仍然有点困惑,为什么会发生。 – haakym

    +0

    在这种情况下,您不需要rebase,因为您将两个分支合并在一起。我会澄清答案。 –