追溯性地将Git提交作为一个分支

时间:2013-07-11 13:56:13

标签: git branch git-branch git-rebase pull-request

一堆问题询问如何重写(rebase)一些提交以便它们出现在分支上,但这些似乎都假设rebase实际上是必需的,即分支所需的提交是穿插的需要master提交的提交(无论是由“你”还是其他人提出)。

这个问题比较简单:我在master分支上有一个存储库的克隆,我做了一堆打算创建GitHub拉取请求的提交。通常我会跑

git checkout -b new-feature
在开始提交之前

,但在这种情况下我忘记了。我是否可以追溯将此序列标记为提交为新分支(无需使用git rebase)?

2 个答案:

答案 0 :(得分:3)

您可以将提交移动到分支并将主分支重置为它所在的位置:

git branch new-feature
git reset --hard origin/master

请注意,这会消除任何未提交的更改,如果这是一个问题,您应该在开始保存之前使用git stash

答案 1 :(得分:1)

假设fork是您的GitHub分支的远程:

git checkout -b new-feature origin/master
git reset --hard master
git push fork new-feature
git checkout master
git reset --hard origin/master

即:

  1. 根据上游提示创建新分支。
  2. 强制它包含之前在master上提交的内容。
  3. 将分支推送到分叉存储库以准备拉取请求。
  4. 返回master分支。
  5. 从中删除新提交。
  6. 也许不是最优雅的解决方案,但似乎有效。可能还希望将--set-upstream传递给push