我对github社交编码很新,并且在遵循github指南方面遇到了麻烦。我将尝试描述发生的事情以及我想要实现的目标 - 希望更有经验的git向导可以帮助我找出到达那里所需的街机命令。
我希望获得合并到上游/主机的所有更改。最好是各自的提交,而不是数百个文件的大量提交。因为我在前 上游/主人(日期为2012年3月29日)进行开发,我想有效地需要"插入"一些提交在3月29日的最后上游/主更改和我8月8日的第一次提交之间,然后在那之上添加稍后发生的那些。 我该怎么做?
(我也不想在此过程中销毁我的提交/分叉; - )
git checkout master
git remote add upstream git://github.com/phatboyg/MassTransit.git
git rebase upstream/master
git push
然而,它不会让我做git push
,抱怨我的本地提示是在原点后面的10次提交(可能是我在我的主题分支上做出的提交,后来合并到 origin / master < / EM>?)。
似乎我可能被建议所困扰。例如。或许最好创建一个单独的分支,例如。 local-master ,并把它视为......好吧,我自己的主人。那么 master 只会与上游/主保持联系,我偶尔会使用上游/ 来源/主 master 并与 origin / local-master ...
合并你们如何管理你的货叉?
我一直无法找到一种方法来可视化分支历史记录,哪些分支与另一个分支合并,以及何时等等.Github for Windows仅显示当前所选分支的平面历史记录(这里是悲伤的面孔)。该网站确实有网络的一些可视化(here is one for MassTransit),但这比graphs in TortoiseHg的信息要少得多。我错过了一些明显的东西吗其他人是否只记得与什么时间和什么时候合并的内容?
我正在分享poor-man's visualization来帮助解释发生的事情。
答案 0 :(得分:6)
我假设你将会或者已经为你的前叉设置origin
遥控器,upstream
也是如此(如上所述)。
然后我会取一下upstream
,这样你就可以在本地保存所有分支。然后,您可以在回购之间进行比较,看看在分歧日期或附近是否存在共同提交。
gitk --all
可视化在这里很有用。不要忘记即使你做了一个rebase,旧的提交系列仍然存在,所以你可以给它一个名字
[编辑]一个罗嗦的描述。
显然,合并提交正在“阻碍”,因此需要按摩远,以便可以使回购再次同步。
temp
分支,这样就不会丢失任何内容。reset
你的主分支回到你和上游之间的最后一次公共提交。reset
您的功能分支就在合并之前。checkout
合并提交以获得您期望的工作树,然后commit
修复了feature
分支上的工作树(即没有合并)。现在master
上有一条简洁的线,feature
上的一条干净但旧的线,以及temp
上的所有合并后发展。如果快乐,你应该强行推送到origin
。
pull
- 它(即master
等)都应该快进。rebase
将temp
合并后的发展合并到feature
(如果需要)。rebase
feature
到你在master上熟悉的最后一次提交(应该相对简单)。rebase
feature
(再次)关于master的最新提交,随时修复(如果容易的话,结合最后一步; - )。这应该最终为您提供一个完整的功能开发线,并且适合在没有任何冲突的情况下上游。
答案 1 :(得分:2)
以下是一些想法。
Cherry pick方法:
git checkout master
git cherry-pick C2..C4
新分支rebase方法:
git checkout upstream/master
git branch new-master
git rebase master
# new-master should now look like what you want, once you confirm this
git branch -m master old-master
git branch -m new-master master
Rebase --onto方法(允许您选择所需的提交范围):
git checkout master
git rebase --onto master C2 C4 # puts you into a detached HEAD
git branch new-master
# rename branch as above if it is correct