我已经做了很多工作(“你的分支比 ‘origin/master’ 领先 37 次提交。”)这真的应该进入它自己的分支而不是进入master. 这些提交只存在于我的本地机器上,并没有被推送到origin,但情况有些复杂,因为其他开发人员一直在推送,origin/master而我已经取消了这些更改。
master
origin
origin/master
如何追溯地将我的 37 个本地提交移动到新分支上?根据文档,似乎git rebase --onto my-new-branch master或...origin/master应该这样做,但两者都只给我错误“致命:需要一个修订版”。 man git- rebase对提供修订只字未提,rebase而且它的例子也没有这样做,所以我不知道如何解决这个错误。
git rebase --onto my-new-branch master
...origin/master
man git- rebase
rebase
(请注意,这 不是 将现有的、未提交的工作移动到 Git 中的新分支或如何将我的本地未提交更改合并到另一个 Git 分支?因为这些问题处理本地工作树中未提交的更改,而不是已提交的更改已在本地提交。)
这应该没问题,因为您还没有将提交推送到其他任何地方,并且您可以在origin/master. 首先,我会运行 agit fetch origin以确保它origin/master是最新的。假设您目前在master,您应该能够:
git fetch origin
git rebase origin/master
…这将重播您所有未提交的origin/master提交origin/master。rebase 的默认操作是忽略合并提交(例如,您git pull的 s 可能引入的那些),它只会尝试将您的每个提交引入的补丁应用到origin/master. (您可能必须在此过程中解决一些冲突。)然后您可以根据结果创建新分支:
git pull
git branch new-work
…然后将您的master背部重置为origin/master:
# Use with care - make sure "git status" is clean and you're still on master: git reset --hard origin/master
git branch当使用,等进行这种操作分支时git reset。我发现经常使用或类似工具查看提交图很有用gitk --all,只是为了检查我是否了解所有不同的 ref 指向的位置。
git branch
git reset
gitk --all
或者,您可以首先根据您的主人所在的位置(git branch new-work-including- merges)创建一个主题分支,然后master按上述方式重置。但是,由于您的主题分支将包括合并,origin/master并且您还没有推送您的更改,我建议您做一个 rebase,以便历史更整洁。(此外,当您最终将主题分支合并回 master 时,更改会更加明显。)
git branch new-work-including- merges