我已经完成了相当多的工作(“你的分支在37次提交之前超过了'origin / master'。”)这真的应该进入自己的分支而不是master
。 这些提交只存在于我的本地机器上,并没有被推送到origin
,但情况有点复杂,因为其他开发人员一直在推动origin/master
,我已经取消了这些更改。
如何追溯将我的37个本地提交移动到新分支? 根据文档,似乎git rebase --onto my-new-branch master
或...origin/master
应该这样做,但两者都只是给我错误“致命:需要单个修订”。 man git-rebase
只字未提提供修订rebase
及其例子不这样做,所以我不知道如何解决这个错误。
(请注意,这不是 将现有的,未完成的工作移动到Git中的新分支或如何将我的本地未提交的更改合并到另一个Git分支中的重复?因为这些问题涉及本地工作树中未提交的更改,而不是具有的更改已在当地承诺。)
#1楼
关于什么:
- 从当前的HEAD分支。
- 确保你是主人 ,而不是你的新分支。
-
git reset
在开始进行更改之前git reset
为上一次提交。 -
git pull
重新拉出你重置时丢弃的远程更改。
或者,当您尝试重新合并分支时,这会爆炸吗?
#2楼
或者,在您提交错误的分支后,执行以下步骤:
-
git log
-
git diff {previous to last commit} {latest commit} > your_changes.patch
-
git reset --hard origin/{your current branch}
-
git checkout -b {new branch}
-
git apply your_changes.patch
我可以想象第一步和第二步有一个更简单的方法。
#3楼
另一种方法假设branch1 - 是具有提交的更改branch2的分支 - 是期望的分支
git fetch && git checkout branch1
git log
选择您需要移动的提交ID
git fetch && git checkout branch2
git cherry-pick commit_id_first..commit_id_last
git push
现在从初始分支恢复未删除的提交
git fetch && git checkout branch1
git reset --soft HEAD~1
#4楼
如果你的提交次数很少而你不在乎这些提交是否合并为一个mega-commit,那么这种方法效果不错,并不像git rebase
那样可怕:
unstage文件(用提交#替换1)
git reset --soft HEAD~1
创建一个新的分支
git checkout -b NewBranchName
添加更改
git add -A
提交
git commit -m "Whatever"
#5楼
对我来说这是最好的方式:
- 检查更改并合并冲突
git fetch
- 创建一个新的分支
git branch my-changes
并推送到远程 - 将上游更改为新创建的分支
git master -u upstream-branch remotes/origin/my-changes
- 将提交推送到新的上游分支。
- 切换回上一个上游
git branch master --set-upstream-to remotes/origin/master
来源:oschina
链接:https://my.oschina.net/u/3797416/blog/3163554