拉動後將已提交(但未推送)的更改移動到新分支

我已經完成了至關多的工做(「你的分支在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
相關文章
相關標籤/搜索