我有两个分支,开发和主。我想在开发分支上创建一个新功能,所以我这样做:
git flow feature start test_01
创建功能分支并切换到此分支。出于测试原因,我切换到开发分支并编辑文件read_me.markdown。我提出这个改变并推动它。
我切换回功能分支并在同一行上编辑相同的read_me.markdown文件以引发合并冲突。要完成我的功能:
git flow feature finish test_01 -r (so it rebases the feature branch)
现在发生冲突我使用vim-fugitive使用 vimdiff 修复它。我启动vimdiff并执行“:ls”我选择要使用的远程分支。接下来我做":diffget 4" ,接着是":diffupdate" 然后我只是写文件并退出所有“:WQA”
现在冲突已修复并且发生了合并,我只是简单地推动我的更改。
问题:这样做的时候我去看看Github的mac工具,看看没有冲突也没有变化。但是,当我切换(checkout)到主分支并返回到开发分支时,我再次得到相同的合并冲突?
所以我想知道我的工作方式有什么问题。
非常感谢您的帮助
UPDATE1) Github工具冲突:
Auto-merging README.markdown
CONFLICT (content): Merge conflict in README.markdown
(1)
UPDATE2)尝试没有rebase相同的错误,仅在Github工具中检出分支时没有错误
UPDATE3)
1)git flow feature start test
2)进行改变以开发 - >所以我可以引发冲突
3)对功能进行更改
4)git rebase功能开发
5)修正更改 - >当我想提交它时说“没有变化 - 你忘了使用' git add'?”
6)git checkout develop
7)git merge功能 - > 仍然在开发分支上合并冲突
UPDATE4)更多详情
1)我正在进行新的分支开发
2)git flow init
3)git flow feature start enhancement1 - >功能分支已创建
4)git checkout develop
4.1)在文件readme.md中我添加“testtesttest”并提交我的工作
4.2)tig状态
4.2)我将文件readme.md设置为“要提交的更改”
4.3)我提交了这个文件
4.4)承诺“承诺开发分支”
5)git checkout feature / enhancement1
5.1)在文件readme.md中我添加“xxxxxxxxx”并提交我的工作
5.2)tig状态
5.2)我将文件readme.md设置为“要提交的更改”
5.3)我提交了这个文件
5.4)承诺为“在功能分支上提交”
6)git rebase feature / enhancement1 develop
First, rewinding head to replay your work on top of it...
Applying: Commit on Develop Branch
Using index info to reconstruct a base tree...
M README.md
Falling back to patching base and 3-way merge...
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Failed to merge in the changes.
Patch failed at 0001 Commit on Develop Branch
The copy of the patch that failed is found in:
/Users/Vincent/Documents/featureconflicts/.git/rebase-apply/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".
7)我现在有一个冲突我会修复它将文件设置为5.1的条件(在文件readme.md我添加“xxxxxxxxx”)
8)修正了冲突
9)git rebase --skip
10)切换到我的开发分支
11)git flow功能完成增强
- >现在一切都很好。所以需要rebase --skip。
答案 0 :(得分:1)
您是否在一个有数百人在同一个项目上工作的环境中工作?我不觉得你这样做,因此盲目使用分支模型git flow指的是一个巨大的矫枉过正。您不必为了使用分支而从分支跳转到分支。在需要时使用分支。 所以首先我建议删除流量工具并使用git。 在一个独立项目中,您可以直接在开发分支中轻松开发并分支出功能,以防您需要并行执行其他操作。
如果你确实使用了功能分支,这里应该是一个应该做的技巧:
git checkout -b myfeature develop # creating branch from develop and checking out
commit, commit, commit...
git rebase myfeature develop # resolve conflicts if any
git checkout develop
git merge myfeature # fast-forward
git checkout master
git merge develop # fast-forward
git push # or git push <remote_name> master
这似乎更清晰,更简洁。
从OP的最新更新中可以清楚地看出,在发生冲突时,他最初没有正确完成rebase操作。如果在rebase期间发生冲突,你应该这样做:
`git status` #will provide the the list of conflicting files marking them as
both modified, so edit them to remove conflicts
`git add {files}` # to tell git that the conflicts are resolved and you can
continue with rebase
`git rebase --continue` # continue rebase operation, by applying next
patch in line.
取决于您解决冲突的方式,如果触及相同的代码,下一个补丁可能会导致另一组冲突。
答案 1 :(得分:1)
因此,如果发生冲突,这个故事的线索是:
- &GT;并且需要保持两个分支的变化 - git rebase - 继续 - &GT;如果只需要保留更改功能 - git rebase --skip