重置为git commit除了我最近的提交

时间:2017-07-16 19:23:18

标签: git github

现在问题就在这里。

所以我抓住了上游分支并进行了一些更改并创建了一个提交。

我现在有一个雇主告诉我,我需要向他的分公司做一个公关。但他的分支并没有更新到最新的提交,就像我的一样。

因此,当我做PR时,它也会将所有提交带到他的分支和上游之间。我只是想用我最新的公告。

假设这个人很顽固,并且不想更新他的分支。我该怎么做呢?

我现在的解决方案是重置到他当前的分支并且几乎手动添加我的所有更改然后创建提交。这将花费太长时间。

有更好的方法吗?

2 个答案:

答案 0 :(得分:1)

你可以使用樱桃采摘:https://git-scm.com/docs/git-cherry-pick 通过选择要包含在PR中的提交来创建新分支。 并创建您的公关。

答案 1 :(得分:1)

将您的提交(或提交集)复制到另一个人最近提交之后的新提交(或提交集)。

这有点令人困惑,所以在这里有三个人的名字可能会有所帮助。您有自己的提交,我们可能会为Viet标记V。至少有两个人参与其中:您的雇主E和您的上游U

您的上游 是最新的:

...--E--F--G--H--I   <-- master (in U)

您克隆了他们的存储库,获取了所有提交,然后添加了您自己的:

...--E--F--G--H--I   <-- upstream/master (in V)
                  \
                   J--K--L   <-- master (in V)

与此同时,你的雇主落后了:

...--E--F--G   <-- master (in E)

如果您提出了拉取请求,则您的请求会显示通过L&#34;进行提交。对于U先生,这是您的三次提交J--K--L,因为他的masterI结束。不过,对于E先生来说,这是你的三件事以及U先生的两件事。

因此,如果您现在将原始提交复制到G之后的新提交:

             J'--K'--L'   <-- anotherbranch (in V)
            /
...--E--F--G--H--I   <-- upstream/master (in V)
                  \
                   J--K--L   <-- master (in V)

你现在可以向E先生发送一个请求他提交L'的请求。由于他的提交字符串以提交G结束,因此会向他发送J'K'L'

E先生最终可能需要更新以匹配U。当他这样做时,他必须决定如何处理 J'--K'--L' J--K--L这两个事实。您也必须决定是否保留两份提交的副本。

注意:您可以使用git cherry-pick(这非常简单)或使用git rebase(这是一种自动樱桃选择)提交复制操作最后一个git reset移动一个分支名称,以便“忘记原始提交以支持新副本”。樱桃挑选在概念上更简单,因为这个特殊的操作是&#34;倒退&#34; (backporting),除非其他一些(不可预见/未公开的)考虑因素超越了这一点,否则我会亲自坚持下去。