我在一些仓库中创建了一个PR,并从本地删除了该分支。过了一会儿(当几次提交在repo中合并时)我想在PR中进行更改,所以我创建了具有相同名称的分支并提取了所有更改并添加了更多提交。但是当我推动更改时,它会显示回购的所有提交(大约3k提交)。
我想问题是,最初分支是使用master
的不同状态创建的,当我再次创建分支时,它处于master
的不同状态,所以只要我按下,所有的差异都反映在PR中作为3k提交。
现在我想摆脱这个问题。我只希望展示PR的提交。怎么可能?
答案 0 :(得分:2)
你可以试试这个
首先找到您的旧提交
git log --after="2014-7-1" --before="2014-7-4" --author="John"
您可以找到有关格式化日志输出here的更多信息。
在您的本地分支中将HEAD重置为旧提交,并选择新提交
git reset <old commit ID>
git stash; git stash drop
git cherry-pick <new commit ID's>
git push -f <remote> <branch-name>
这将创建您的PR以仅拥有旧提交和新提交。基本上你要删除分支中master的所有提交。
您的分析似乎是正确的。您创建PR时,主人处于不同的状态。
虽然拉后不需要创建新的分支。您已删除本地仓库中的分支,而不是远程分支。
您可以完成git pull
和git checkout <branch-name>
,并且您将在本地仓库中以与您离开时相同的状态重新创建分支。
答案 1 :(得分:1)
我认为你的结论是正确的。您似乎已将所有更改从master推送到您的分支。
在我继续之前,我会做一些假设:
你首先从大师那里分支出来
您希望将来在某个时刻将您的分支合并到master 它们主要用于我列出的第三种解决方案。
我能想到的几种摆脱这种方式:
从master中创建一个新分支,并从您原来的pr状态和所做的更改中选择所有提交。但是,如果您对cherry pick进行了大量更改,并且/或者由于对master分支的中间更改,您之后所做的更改与较旧的更改发生冲突,则可能会出现问题。
克隆存储库,在推送新更改之前检查最新提交的分支,尝试强制推送分支(我假设没有其他人将自己的更改推送到该分支)然后应用你的改变。潜在问题:“强制推动”通常在星球大战宇宙中效果更好,而不是在git ......
将master合并到您的分支中。假设您的最终目标是在某个时刻将分支合并为主,这可能是最佳选择。问题:根据我的经验,github PR diff预览有时会混淆并继续显示在做过类似事情之后已经在master中的更改。通常创建一个新的pr有助于此。另一个明显的问题是来自master的任何更改会影响在分支上编辑的文件 - 冲突或只是模糊意图。
也许还有一些方法可以使用恢复来扭曲你的方式,但这不是我的第一个选择(也许你会得到一些解决方案的其他答案)。我的建议是我上面列出的最后一个 - 将master与你的分支合并(考虑所有假设)。
P,对不起,如果它太冗长,但希望它会帮助你。很想看到其他答案。