Git Flow特征创建和重新定位功能

时间:2014-04-15 14:11:36

标签: git merge rebase vimdiff vim-fugitive

我有两个分支,开发。我想在开发分支上创建一个新功能,所以我这样做:

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。

2 个答案:

答案 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