我试图为一个开源项目(无尽的天空)做一个好的Git工作流程,但是在我开始学习的时候我并没有找到一个干净的历史。我现在的工作流程是:
upstream/master
是here。upstream/master
。我开发的每个功能都有一个自己的分支,由我的主人创建,我使用自己的(本地)alpha
和(推)beta
分支将我的功能组合起来进行测试/播放。我的问题出现在我的分叉主人身上:This branch is 15 commits ahead of endless-sky:master.
没有文件发生变化;它合并提交消息。这对我来说似乎很难看,所以我做了一些阅读,特别是文章Stop using 'git pull': A better workflow,我已经改用了变基/快进。
但在这种情况下,清除现有合并提交历史记录的最佳方法是什么?它也涉及我的一些功能分支(参见:feature/JammingHaywire
),并且我不想提交PR,其中有意义的提交被无意义的合并提交淹没。
我已经阅读了其他各种问题,我不太清楚我是否最好:
master
- 是否安全,尤其是使用GitHub?git rebase -i [which commit?]
回到某一点 - 似乎无法奏效。尝试回到0facf00
,有些提交 long 在我分叉之前,我的合并提交哈希值(例如在GitHub上看到的3be4d97
)不会显示在文本中要丢弃的文件。最终结果没有改变。答案 0 :(得分:2)
我的问题在于我的分叉大师:“这个分支是在无尽的天空之前提交的15个提交:大师。”没有文件改变;它是合并提交消息。
让我们从那里开始:
将fork master重置为endless-sky / master
假设你克隆了你的叉子:
cd /path/to/fork/clone
git checkout master
git remote add-url endless-sky /url/of/endless-sky
git fetch endless-sky
git reset --hard endless-sky/master
git push --force
现在,检查您的任何功能分支(您打算从中制作PR),并在主分支(现在也代表endless-sky/master
)上对其进行重新定位
git checkout my_feature_branch
git rebase master
git push --force
答案 1 :(得分:1)
您的第一个选择,删除并重新创建master
,可能是最简单的选择。以下是如何清理的事情:
如果您还没有,请切换到master
:
git checkout master
创建一个备用分支,以防万一:
git branch backup
重置master
以匹配upstream
的匹配项。这实际上与删除和重新创建分支,选项1相同,但只需要一个命令:
git reset --hard upstream/master
强制推:
git push --force-with-lease origin master
强制性警告:由于rebase会重写历史记录,因此对于在此分支上工作的其他人来说,这可能会造成危险/破坏。确保您清楚地告知您与您合作的任何人所做的事情。由于这是一个私人分支,我认为这不会成为你的问题。
您的master
分支现在与upstream/master
保持同步,因此在GitHub上您应该看到:
This branch is even with endless-sky:master.
如果您以后发现遗漏了任何内容,可以查看backup
的历史记录以找到它。
要修复任何类似损坏的功能分支,请执行以下操作:
git checkout myfeature
git rebase -i master
您的编辑器将打开,您将看到提交列表。删除包含额外合并的任何行,然后保存并退出。再次推送--force-with-lease
。