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

陌路散爱 提交于 2020-02-26 11:53:39

我已经完成了相当多的工作(“你的分支在37次提交之前超过了'origin / master'。”)这真的应该进入自己的分支而不是master 。 这些提交只存在于我的本地机器上,并没有被推送到origin ,但情况有点复杂,因为其他开发人员一直在推动origin/master ,我已经取消了这些更改。

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

(请注意,这不是 将现有的,未完成的工作移动到Git中的新分支如何将我的本地未提交的更改合并到另一个Git分支中的重复因为这些问题涉及本地工作树中未提交的更改,而不是具有的更改已在当地承诺。)


#1楼

关于什么:

  1. 从当前的HEAD分支。
  2. 确保你是主人 ,而不是你的新分支。
  3. git reset在开始进行更改之前git reset为上一次提交。
  4. git pull重新拉出你重置时丢弃的远程更改。

或者,当您尝试重新合并分支时,这会爆炸吗?


#2楼

或者,在您提交错误的分支后,执行以下步骤:

  1. git log
  2. git diff {previous to last commit} {latest commit} > your_changes.patch
  3. git reset --hard origin/{your current branch}
  4. git checkout -b {new branch}
  5. 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楼

对我来说这是最好的方式:

  1. 检查更改并合并冲突git fetch
  2. 创建一个新的分支git branch my-changes并推送到远程
  3. 将上游更改为新创建的分支git master -u upstream-branch remotes/origin/my-changes
  4. 将提交推送到新的上游分支。
  5. 切换回上一个上游git branch master --set-upstream-to remotes/origin/master
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!