git使遠程分支回退到指定的節點
- 引言
- 場景描述
- 步驟
引言
最近提交代碼的時候,總將分支合并錯,原本要合到A分支,結果合并到了B分支,這樣就導致b分支需要回退到我沒有合并之前的節點處。
本文記錄下怎么將遠程分支回退到指定的節點。
場景描述
我的遠程分支名為master,本地分支名為develop,現在所在的分支為gpsd,本應該將gpsd分支提交的代碼合并到遠程分支gpsd_master上,但操作錯誤合并到了master上,現在要將mster分支回退到沒有合并之前的節點處。
步驟
- 切換到分支develop
git checkout develop
- 確保本地分支develop是最新的
git fetch origin
- 查找目標提交節點
查看遠程分支 master 的提交歷史,找到需要回退到的目標提交的哈希值(commit hash)。
git log origin/master
- 更新本地對遠程分支的引用
Git 的遠程分支實際上是一個本地引用(refs/remotes/origin/master),你可以直接在本地更新它。
執行以下命令,將 origin/master 強制重置到目標提交節點:
git update-ref refs/remotes/origin/master abc1234
這一步僅更新了本地對遠程分支 origin/master 的引用,不會影響實際的遠程倉庫。
如果你只是想查看效果,可以在這一步之后運行 git fetch --prune 或直接查看 git log origin/master,確認引用是否已更新。
5. 強制推送回遠程倉庫
由于修改了遠程分支的歷史記錄,需要使用 --force 推送:
git push origin master --force
由于我操作的是遠程分支 origin/master,本地分支 develop 不會受到影響。
如果需要同步 develop 分支與 master 的最新狀態,可以在之后執行 git merge 或 git rebase。
上述方法如果不行,可以使用下面的方式,反正上面的方式,我沒有成功。我使用的是下面的方式。
6. 創建一個新的本地分支指向目標節點
git checkout -b temp-master abc1234 # 替換 abc1234 為目標提交的哈希值
- 強制推送這個臨時分支到master遠程分支
git push origin temp-master:master --force
目的達成之后,就可以刪除之前創建的臨時分支了,使用指令:
git branch -d temp-master