如何正确使用git工作流与rebase?

时间:2016-10-05 18:10:01

标签: git bitbucket git-workflow

我正在使用bitbucket并且使用git的rebase功能遇到了问题。简而言之,我需要重新应用每次改变时已应用的更改。我已使用以下步骤重新创建了该问题。它是一个简化版本但结果是一样的。

  1. 开发人员A创建一个git repo并向{{​​1}}添加contributors.txt,提交和推送。现在master有一个master文件。该文件的内容是 contributors.txt
  2. 开发人员A从 Developer A 创建branch-a
  3. 开发者B从master创建branch-b
  4. 开发人员A将贡献者文件附加在master中,因此看起来像。 branch-a
  5. 开发人员B在 Developer A Developer A2 中附加贡献者文件,所以看起来像 branch-b
  6. 开发人员A提交并将更改推送到远程 Developer A Developer B
  7. 开发人员B提交并将更改推送到远程branch-a
  8. 开发人员A将branch-bbranch-a合并。
  9. 开发人员B签出master并拉取,以便本地主人更新上面步骤8中提到的合并所应用的更改。
  10. 开发人员B签出master并执行branch-b
  11. 开发人员B遇到合并冲突。
  12. 开发人员B修复了合并冲突,因此文件现在看起来像 git rebase master
  13. 开发人员B执行 Developer A Developer A2 Developer B 添加已修复的冲突并运行git add。一切顺利。
  14. 开发人员B提取git rebase --continue,因为现在本地和远程branch-b已经分歧,他们需要合并。 (需要在拉动之前设置上游)
  15. 开发人员B解决合并冲突,现在本地branch-b具有来自master的更改,可以推送到远程。
  16. 开发人员B将branch-b推送到远程。使用branch-b。一切顺利。
  17. 开发人员B在git push origin branch-b中创建一个新文件并提交。
  18. 然后开发人员B.
    • branch-b
    • git checkout master(掌握是最新的,因为它自上次拉动后没有改变,即步骤9)
    • git pull
    • git checkout branch-b
  19. 执行git rebase master时,git要求开发人员B再次解决相同的冲突。为什么会这样?是否应该知道已经应用的更改并且不要求再次应用?
  20. 我想我可以使用merge而不是rebase来克服这个问题。但似乎我错误地使用了rebase。请让我知道我做错了什么

1 个答案:

答案 0 :(得分:2)

在步骤13之后,您应该可以执行branch-b。这会将已发布的版本推送到您的遥控器a = c("people/NN + is/VB", "no/AJ + one/NC + can/VA", "certain/AJ + man/NN + is/VB", "every/AJ + one/NC + is/VB") library(stringr) word_N <- str_match(a, "([a-zA-Z]+)/[N][a-zA-Z]*\\s*\\+\\s*is/VB")[,2] word_N[!is.na(word_N)] #[1] "people" "man" "one" ,并且由于它已经在主服务器上重新定位,因此您应该能够毫无问题地与主服务器合并。

上一个方法的问题是,在master之上进行rebase之后,你只需要将merge to commit添加到origin / branch-b,而这个提交尚未在master上重新设置,因此它仍然存在分歧。如果你进行强制推送,那么它只是用你的重新分支替换远程分支。