我们必须为预先存在的项目添加新功能。 所以每个人都创建自己的分支来制作一个功能。
现在,在我向我的特定分支添加了一些代码之后,我的队友们告诉我最好重新定位,以便将来的合并变得更容易。
现在因为我们正处于启动项目的初期,许多小文件已经被更改,比如pom.xml文件,.gitlab-ci.yml文件,给了我很多合并错误。此外,虽然我一直试图对整个github事物进行精神上的控制,但我的队友们在此期间增加了一些代码,我再也看不到森林已经过了树木。
所以我要做的就是保留我的新代码,但用主分支中的所有代码更新我的特定分支。
如果我没有弄错,这正是一个rebase做的正确吗?
虽然我像这样执行了一个rebase:
-git rebase master
它给了我20个合并错误。但事实是,它从我的分支开始时的每次更新开始,当它第一次分叉时,很多时候它只是重写同一个文件。所以我所做的只是将文件从github复制粘贴到我的项目中(只有几个文件),然后仔细阅读每个合并错误,如果它源自我复制粘贴的文件,我只是跳过它们。
(还有一点奇怪的是,有些文件仍然存在错误,我只是复制粘贴了我正在重新定位的分支中的确切文件)
然后,当我最终错过了最后一个错误时,它给了我这个
fatal: update_ref failed for ref 'refs/heads/dev_504':
cannot lock ref 'refs/heads/dev_504': ref refs/heads/dev_504 is at
XXXXXXX
but expected XXXXXXXX
Could not move back to refs/heads/dev_504
然后我重新启动计算机并获得此
fatal: cannot resume: .git/rebase-apply/final-commit does not exist.
然后我中止了rebase,当我再次尝试时,我再次得到20个错误。
github是如此复杂,我想要做的就是从主分支获取代码并添加到它(顺便说一下只有1个文件)。
所以另外我可以强制从主分支拉,然后只是添加我的文件?我觉得这不是你怎么做的。
P.S。 :我通过maven添加了一个库,这会影响拉动和推动吗?
由于
答案 0 :(得分:0)
您可以做的是将分支上的所有提交压缩/压缩到一个整合提交中。为此,您必须找到master
和feature_branch
的共同祖先。命令git merge-base --all master feature_branch
将给出最佳共同祖先的散列(如果只有一个散列,则更好)。请记住哈希(X
)。现在,您需要将您的工作表示为单个提交。您可以执行交互式rebase或重置快捷方式(git reset --soft
,git commit
)。我个人更喜欢后者。确保您在功能分支中并保持干净状态。
git reset --soft X
git commit -m'MESSAGE'
git rebase master <= sort conflicts
git checkout master
git merge feature_branch <=it will be FastForward merge