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

我已经完成了至关多的工做(“你的分支在37次提交以前超过了'origin / master'。”)这真的应该进入本身的分支而不是master 。 这些提交只存在于个人本地机器上,并无被推送到origin ,但状况有点复杂,由于其余开发人员一直在推进origin/master ,我已经取消了这些更改。 git

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

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


#1楼

关于什么: spa

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

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


#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

我能够想象第一步和第二步有一个更简单的方法。 rem


#3楼

另外一种方法假设branch1 - 是具备提交的更改branch2的分支 - 是指望的分支 文档

git fetch && git checkout branch1
git log

选择您须要移动的提交ID get

git fetch && git checkout branch2
git cherry-pick commit_id_first..commit_id_last
git push

如今从初始分支恢复未删除的提交 it

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
相关文章
相关标签/搜索