小编典典

拉动后将已提交(但未推送)的更改移动到新分支

all

我已经做了很多工作(“你的分支比 ‘origin/master’ 领先 37 次提交。”)这真的应该进入它自己的分支而不是进入master.
这些提交只存在于我的本地机器上,并没有被推送到origin,但情况有些复杂,因为其他开发人员一直在推送,origin/master而我已经取消了这些更改。

如何追溯地将我的 37 个本地提交移动到新分支上?根据文档,似乎git rebase --onto my-new-branch master...origin/master应该这样做,但两者都只给我错误“致命:需要一个修订版”。 man git- rebase对提供修订只字未提,rebase而且它的例子也没有这样做,所以我不知道如何解决这个错误。

(请注意,这 不是 将现有的、未提交的工作移动到 Git
中的新分支或如何将我的本地未提交更改合并到另一个 Git
分支?
因为这些问题处理本地工作树中未提交的更改,而不是已提交的更改已在本地提交。)


阅读 98

收藏
2022-03-08

共1个答案

小编典典

这应该没问题,因为您还没有将提交推送到其他任何地方,并且您可以在origin/master. 首先,我会运行 agit fetch origin以确保它origin/master是最新的。假设您目前在master,您应该能够:

git rebase origin/master

…这将重播您所有未提交的origin/master提交origin/master。rebase 的默认操作是忽略合并提交(例如,您git pull的 s 可能引入的那些),它只会尝试将您的每个提交引入的补丁应用到origin/master.
(您可能必须在此过程中解决一些冲突。)然后您可以根据结果创建新分支:

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 new-work-including- merges)创建一个主题分支,然后master按上述方式重置。但是,由于您的主题分支将包括合并,origin/master并且您还没有推送您的更改,我建议您做一个
rebase,以便历史更整洁。(此外,当您最终将主题分支合并回 master 时,更改会更加明显。)

2022-03-08