在Github上,我有:
github_master_branch
和一个个人(远程)分支,比如github_personal_branch
过去我是从github克隆的
我签出了github_personal_branch
(使用Pycharm)并创建了一个具有相同名称的本地分支(但假设它是local_personal_branch
)
从local_personal_branch
推送到github_personal_branch
现在,在github_personal_branch
上,我已经在github_master_branch
的前面和后面进行提交。
我想将更改从github_master_branch
更改为我的
local_personal_branch
,解决冲突,然后将其推送到
github_personal_branch
。
我尝试重新设置基准,但是我得到了很多提交,所有github_master_branch
都在前面,而不是移动标头。
我还尝试了Pycharm中的rebase选项(多种组合),但我对onto
,from
字段逻辑不太了解。
我尝试了第二次手动重新设置基准,但是除了master之外,我还获得了非常旧的代码,这些代码可以在local_personal_branch
上使用。
答案 0 :(得分:3)
对于rebase in Pycharm,您需要确保自己位于正确的分支的第一位:
local_personal_branch
origin
refs/remotes/origin/github_master_branch
(在字段上)无论如何,变基都需要强制推动,但是,这既不是强制推动,也不是变基的好方法。
在这种情况下,我认为这是:“ local_personal_branch
”是个人(对您):您可以根据需要设置基准并强制将其推送任意次,因为您是唯一的一个正在处理。
重新设置基准的想法是使将来的拉取请求变得微不足道,因为您的local_personal_branch
提交将基于最新的origin/github_master_branch
重新提交,这意味着接受这样的PR在一个简单的快速合并中:没有冲突。
此外,如here所述,将master
合并到功能分支中不是最佳实践:您(通常)合并到master
,而不是从它合并。 >
请参阅“ rebase vs. merge”。
答案 1 :(得分:2)
虽然我已经尝试过CLI rebase,但是我从不了解如何使用IntelliJ ^ re 的rebase选项。
据我了解,您具有以下设置:
github/master
v
A-B-C---D-E
\
\-F-G
^
personal,
github/personal
您也应该在某个地方有一个master
分支(本地管理员)。如果您不确定此设置,请向我们提供以下命令的输出:
git log --oneline --decorate --graph local_personal_branch github_personal_branch master github_master_branch
您想要的是将您的个人分支重新建立到master上,以获取下图:
github/master
v
A-B-C---D---E---F'---G'
^
personal
github/personal
所以命令是:
git rebase --onto github/master C personal
git push --force
解释一下:
C
和personal
之间的提交放到当前的github/master
分支上。有关信息,您的远程存储库可能称为origin
而不是github
(请参见git remote -v
的输出),因此您应将对github
的引用替换为{{ 1}}。 origin
字母必须替换为C
和master
之间的最后一次公共提交的哈希数。
种类
答案 2 :(得分:0)
代替合并,请使用合并,如下所示:
将最新(远程)github_master_branch
合并到您的local_personal_branch
中。 (通过远程,我指的是该分支在远程上的状态;您可能要先更新本地母版并将其合并,但是请确保您使用的是最新版本)
解决master与分支(在本地local_personal_branch
上)之间的所有冲突
将local_personal_branch
推到github_personal_branch
。
现在,personal_branch和master之间的区别应该只是对personal_branch所做的更改。这将使以后更容易将其合并到母版中。