Git merge 导致回归

标签 git merge

你能帮我解开这个谜吗?几个月来我们一直遇到一个问题,有时我们的 git 存储库中的更改似乎“消失”或回归。我终于发现它正在发生。

我们的工作流程是从 master 创建一个功能分支并开始工作。当我们准备好 merge 我们的工作时,我们首先将 master merge 到功能分支上,并修复任何冲突或集成问题。

在这个特定的 merge 过程中,git 决定选择一个 block 的功能分支版本,而它应该从 master 中选择 block 。没有 merge 冲突,git 只是认为这是正确的做法,但却是错误的。为什么?那么我们能做些什么来防止这种事情发生呢?

最佳答案

为什么要将 master merge 到 feature 中?您的功能分支应该是代表您的更改的一组独立的提交。一旦您将 master merge 到功能中,您就“污染”了您的提交。

如果您需要在分支功能后将更改提交给 master,则应该使用 rebase 。将 rebase (在这个意义上)视为现在再次创建您的分支,并使用您已经在该功能分支上所做的提交。

关于您的更改消失的推测原因是文件的主版本比功能分支提交更新。当您将 master merge 到 feature 中时,不会发生 merge 冲突,因此 git auto 会为了方便而 merge 分支。

尝试重新创建您上面提到的场景,但将功能 merge 到主版本中,看看会发生什么。

编辑:

how would we handle a hotfix that needs to happen in the middle of the integration of the feature with master?

在集成之前,可以从最新的远程主服务器创建一个修补程序作为新分支。请记住,您只是在本地存储库上进行集成,因此此处的任何更改都不是公开的......还没有。

git checkout -b hotfix origin/master
# do changes
git commit -am "Made hotfix"
git checkout master
git merge hotfix

# hotfix complete!
git push origin master 

how do we keep long running feature branches up to date?

这是 rebase 面包和黄油!如果您的功能是孤立的,您可能不必进行 rebase 。也就是说,您应该尝试使您的功能尽可能简洁,因此重新调整这些功能分支的基础是一个好主意。这也意味着您正在“整合”!

git checkout master
git checkout -b long_feature master
# commit
# commit
# commit

# now to rebase!
# get latest changes from others
git fetch origin 
# update your local master branch to reference the latest from origin/master
git branch -f master origin/master
# do the rebase!
git rebase master

# repeat this cycle as often and as many times as necessary until your feature is complete

当您 rebase 时,您可能必须解决冲突。无论如何,这是你在某个阶段必须做的事情,如果你随心所欲地这样做,你可能会遇到不太复杂的冲突需要解决,因为它们是渐进的而不是“大爆炸”。

关于Git merge 导致回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28509322/

相关文章:

git - 如何防止 merge 的更改显示为 'changes to be committed'

python - 合并2个重叠的句子

r - 结合 data.frames 总结 R 中相同列的值

matlab - 在matlab中将表合并在一起

git - 我可以只从另一个 git 存储库中提取某些文件吗?

visual-studio-2010 - 从 GIT pull 时自动包含新添加的文件

git - 我可以抑制 git hook 例如通过 git 命令行参数准备提交消息?

git - 公开提交被推送到存储库的日期

macos - 在 Mac 上,我在哪里可以找到 git-http-backend?

ruby - 在ruby中仅将两个数组的相应元素合并到一个数组中