Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在git中有一个功能分支,可以';从其他分支还原合并后,无法合并主节点_Git_Git Merge_Git Flow - Fatal编程技术网

在git中有一个功能分支,可以';从其他分支还原合并后,无法合并主节点

在git中有一个功能分支,可以';从其他分支还原合并后,无法合并主节点,git,git-merge,git-flow,Git,Git Merge,Git Flow,我们公司已经实现了一种git flow工作流,但并不是每个人都在使用git flow,所以存在一些问题。这里有一个 一位同事在一个功能分支上工作,需要一些目前正在master和develop中的bug修复。然而,他感到困惑,并将develope合并到他的特性分支中,而不是master,从而获得了许多不需要的特性。他推到了我们的git服务器 现在,我看到了他的错误,我们试着改正它。我们恢复了合并提交 git revert -m 1 hismergecommit 并解开了他的合并。然而,如果他试图

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

一位同事在一个功能分支上工作,需要一些目前正在master和develop中的bug修复。然而,他感到困惑,并将develope合并到他的特性分支中,而不是master,从而获得了许多不需要的特性。他推到了我们的git服务器

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

git revert -m 1 hismergecommit
并解开了他的合并。然而,如果他试图将master合并到他的分支中,他会被告知没有什么可合并的!这似乎是因为master在其gaff之前已经被合并到开发中

这幅画给人一种印象,它看起来像什么

有没有一种方法可以在master中合并到他的特性,而不必在错误合并之前将其特性分支重置为,或者在master中选择所有提交

编辑:


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

让我们在合并之前将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

重置分支有什么问题

我复制了如下问题:

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

然后强制推送到服务器。

服务器会阻止强制推送。但是,我们可以要求管理员删除服务器上的分支,然后我们可以在本地重置。您可以通过推(不强制)删除远程分支<代码>git推送原点:功能删除原点上的“功能”(本地分支保持不变)。然后可以再次推动分支;-)不幸的是,我们的服务器配置为不允许任何历史重写。你甚至不能修改一个提交,如果你已经这么做了就试着去推动。我认为在“正常”的情况下,你的解决方案是最好的,只是因为特定的环境有点限制。