2

我们已经在我们公司实现了一种 git flow 工作流,但并不是每个人都在使用 git flow,所以存在一些问题。这是一个。

一位同事正在开发一个功能分支,需要一些当前处于 master 和 development 中的错误修复。然而,他感到困惑,将开发合并到他的特性分支而不是主分支中,从而获得了许多不需要的特性。他推送到我们的 git 服务器。

现在,我看到了他的错误,我们尝试纠正它。我们恢复了合并提交

git revert -m 1 hismergecommit

并取消了他的合并。但是,如果他试图将 master 合并到他的分支中,他会被告知没有什么可合并的!这似乎是由于 master 在他失态之前曾被合并到开发中。

在此处输入图像描述

图片给出了它的样子。

有没有办法将 master 合并到他的特性中,而无需在他的错误合并或樱桃挑选 master 中的所有提交之前将他的特性分支重置?

编辑:

我想补充一点,虽然他已经将分支推送到服务器,但没有其他人拉它,所以在这种情况下重写历史并不“危险”,我只是想知道是否有好的方法解决这些问题,如果它们出现。

4

2 回答 2

1

让我们在合并之前调用 c1 提交。您可以尝试将功能分支重置为 c1,然后将 master 合并到功能分支并推送结果。

git reset --hard c1
git merge master
git commit -am "some stuff"
git pull origin feature_branch
git push origin feature_branch
于 2013-05-28T21:06:46.367 回答
1

重置分支有什么问题?

我已经复制了这样的问题:

git init .

echo line > file
git add file 
git commit . -m "added file"

# Create the branches
git branch -t feature
git branch -t dev

git checkout dev
echo dev-line >> file
git commit . -m "added dev-line"
echo test > another-file
git add another-file
git commit . -m "another file"
git merge master

git checkout feature
echo test > feature-file
git add feature-file
git commit . -m "feature commit"

# merge dev into the feature branch
git merge dev

# undo the merge
git revert -m 1 e04d9159fa54aaf06e7329a7799cc58fc3334d34


# Now we have this mess:
* add2b8ea6583c355cc49048b65f07ce697d9c01c Revert "Merge branch 'dev' into feature"
*   e04d9159fa54aaf06e7329a7799cc58fc3334d34 Merge branch 'dev' into feature
|\  
| *   b506d08d62b6434e1383d50eccc26d5a933703e2 Merge branch 'master' into dev
| |\  
| | * 18671754b703561587c3875d0f56bd99a2e08c74 another file
| * | 978c2f52d1cd10fc27af2f0a59f295d99ac20e28 added dev-line
| |/  
* | ac794379e0a2038822ca772ffb3098b5270f22c2 feature commit
|/  
* d416cf0e4a84517871e93e0ac13a60c586353a79 added file

# Now when we try to merge master we get 'Already up-to-date.' This is because master was already merged.
git merge master

imo 最干净的方法是在提交之前重置功能分支。

git reset --hard ac794379e0a2038822ca772ffb3098b5270f22c2
git merge master

*   4fa1459304668ec7b8d61eed052f9161fce02435 Merge branch 'master' into feature
|\  
| * 18671754b703561587c3875d0f56bd99a2e08c74 another file
* | ac794379e0a2038822ca772ffb3098b5270f22c2 feature commit
|/  
* d416cf0e4a84517871e93e0ac13a60c586353a79 added file

然后强制推送到服务器。

于 2013-05-28T21:43:07.203 回答