Git流功能创建和重定基调功能
我有两个分支机构,发展部和硕士部。我想在开发分支上创建一个新功能,因此我:Git流功能创建和重定基调功能,git,merge,rebase,vimdiff,vim-fugitive,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 th
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 Squisition和vim Diff解决冲突。我启动vimdiff并执行“:ls”我选择要使用的远程分支。接下来我执行“:diffget 4”,然后执行“:diffupdate”,接下来我只需编写文件并退出所有“:wqa”
现在冲突已经解决,合并已经发生,我只是简单地推送我的更改
问题:执行此操作时,我会查看Github for mac工具,并确保没有冲突和更改。但是,当我切换(签出)到主分支并返回到开发分支时,我再次遇到相同的合并冲突
所以我想知道我的工作方式有什么问题。
非常感谢你的帮助
更新1)Github工具冲突:
Auto-merging README.markdown
CONFLICT (content): Merge conflict in README.markdown
(1)
UPDATE2)在没有重新设置基础的情况下尝试了相同的错误,仅在Github工具中签出分支时没有错误
更新3)
1) git流特性启动测试
2) 进行更改以开发->以便引发冲突
3) 对功能进行更改
4) git重基特性开发
5) 修复更改->当我想提交时,它会说“没有更改-你忘记使用'git add'了吗?”
6) git签出开发
7) git合并功能->在开发分支上仍然存在合并冲突
更新4)更多详细信息
1) 我在一家新的分公司工作
2) git流初始化
3) git flow功能启动增强1->功能分支已创建
4) git签出开发
4.1)在文件readme.md中,我添加“testtest”并提交我的工作
4.2)tig状态
4.2)我将文件readme.md设置为“要提交的更改”
4.3)我提交此文件
4.4)承诺为“发展分行承诺”
5) git签出功能/增强功能1
5.1)在文件readme.md中,我添加“xxxxxxxxx”并提交我的工作
5.2)tig状态
5.2)我将文件readme.md设置为“要提交的更改”
5.3)我提交此文件
5.4)提交为“在功能分支上提交”
6) git rebase功能/增强1开发
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中,我添加了“xxxxxxxx”)来修复它
8) 修正了冲突
9) git是否重新设置了基址--跳过
10) 切换到我的开发分支
11) git流功能完成增强
-->现在一切都很好。因此,需要的是重新设置基础—跳过。您是否在一个有数百人参与同一项目的环境中工作?我不觉得你会这样做,因此盲目使用git flow所指的分支模型是一种巨大的过度使用。您不必为了使用分支而从一个分支跳到另一个分支。需要时使用分支。 所以首先我建议放弃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
根据您解决冲突的方式,如果触碰了同一段代码,下一个补丁可能会导致另一组冲突。因此,这个故事的线索是,如果发生冲突: ->需要保留这两个分支的更改—git rebase—是否继续
->如果只需要保留对功能的更改-git rebase--skip签出时会出现合并冲突,或者合并代码在其他分支中没有得到解决?@ExplosionPills第一次合并冲突发生在git flow功能完成时。第二种情况发生在Github工具中切换分支时。如果使用git checkout切换分支,则不会发生错误。我已经在我的第一次更新中添加了确切的错误。
当我想要提交时,它会说“没有更改-你忘了使用‘git add’?”
你真的这样做了吗?但是你真的像错误消息告诉你的那样添加了更改吗?你描述了flow是完美的,但没有回答他为什么会出错的问题。我会说:在你的例子中,Rebase正在尝试重新应用补丁(从feature和develop之间的共同祖先到feature分支的尖端)在开发分支的顶部。在发生冲突的情况下,您必须解决它们,并告诉git您使用了GitAdd,然后重新设置了基址——继续。如果使用“跳过”,则意味着将不会应用要素分支的重基序列中的当前修补程序,并且将转到下一个修补程序。
`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.