[英]Git - Rename a local branch which has 2 commits pushed to remote
我有一個跟蹤遠程分支的分支,並且我做了 2 次提交,這些提交已被推送到遠程分支,但尚未 PR 並合並到 master 中。
我現在需要重命名我的本地分支,將其推送到遠程,然后 PR 並將該分支合並到 master。
這個工作流程是否正確? 在此先感謝...相對不熟悉 Git 的大部分內容,所以我很感激任何意見。
嗨伙計,我希望你了解我的工作流程。 首先,我們必須重置主人。 只是讓你沒有其他人合並一些東西,這會讓你更難。
$ git checkout master
$ git pull
$ git log
$ git reset --hard <commit-id-that-you-copied>
git log
$ git push <remote_name> :<branch_name>
(e.x. git push origin:your_local_branch
$ git branch -m <your_new_name>
git branch --set-upstream-to=origin/your_new_name
這是最簡單的方法,但要確定你在做什么。
(一般來說,你不應該太擔心分支的名稱)
您可以創建一個新分支並刪除舊分支。
git checkout this_name_was_right_and_the_time
git checkout -b feature/this_name_is_definitely right
git push
我發現這里的答案有點偏離目標,或者有點稀疏,所以我想我會跟蹤一個分支重命名並提供一個完整的答案。 該解決方案完全在本地命令行上執行。
因此,根據 OP,如果本地分支被推送到源,但尚未合並,它仍然可以重命名,並且遠程分支被刪除,因此可以將本地分支推送到新名稱下替換它。
假設要重命名的分支是feature/old_name
,新名稱是feature/new_name
。
首先,只需檢查您所在的位置。 有時我認為我仍然在一個特定的分支上,當我不在時,或者我忘記了我應該在一個特定的分支上進行操作,所以最好只檢查你在哪里:
$ git status
# On branch feature/old_name
nothing to commit, working directory clean
要列出所有可用的分支,只需定位:
$ git branch
feature/some_name
* feature/old_name
master
如果您不在要重命名的分支上,請確保您是:
$ git checkout feature/old_name
Already on 'feature/old_name'
然后只需使用-m
選項重命名本地分支。 對於本地分支,就這么簡單:
$ git branch -m feature/new_name
現在要檢查遠程跟蹤,發出一個“非常詳細”的分支請求,並觀察剛剛重命名的分支仍在使用它的舊名稱在遠程跟蹤:
$ git branch -vv
feature/some_name fc0ec55 [origin/feature/some_name] Some commit message
* feature/new_name a64af75 [origin/feature/old_name] Previous commit message
master 3a0c732 [origin/master] Another commit message
所以現在有必要完全刪除舊名稱的遠程跟蹤分支。 新名稱的分支仍然被簽出:
$ git status
# On branch feature/new_name
nothing to commit, working directory clean
$ git push origin --delete feature/old_name
- [deleted] feature/old_name
如果您查看您的在線 web GUI(GitLab、GitHub、BitBucket...),您應該會找到old_name
遠程分支,並且它的提交已經消失了但是現在在本地查看,本地跟蹤實際上並不知道遠程分支已經消失:
$ git branch -vv
feature/some_name fc0ec55 [origin/feature/some_name] Some commit message
* feature/new_name a64af75 [origin/feature/old_name] Previous commit message
master 3a0c732 [origin/master] Another commit message
因此,為了實現這一切,請將本地分支推送到原點,並使用其新名稱:
$ git push -u origin feature/new_name
Counting objects: 21, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (14/14), 2.46 KiB | 0 bytes/s, done.
Total 14 (delta 11), reused 0 (delta 0)
remote: Create pull request for feature/new_name:
* [new branch] feature/new_name -> feature/new_name
Branch feature/new_name set up to track remote branch feature/new_name from origin.
並確認:
$ git status
# On branch feature/new_name
nothing to commit, working directory clean
$ git branch -vv
feature/some_name fc0ec55 [origin/feature/some_name] Some commit message
* feature/new_name a64af75 [origin/feature/new_name] Previous commit message
master 3a0c732 [origin/master] Another commit message
該分支現在應該可以在您的遙控器上以新名稱使用。
我還沒有測試過其他人也將提交推送到遠程分支的場景,但是只要您在執行此序列之前pull
分支,我相信這也應該有效。
如果您有疑問( git
有時就是這樣),您總是可以先 zip 您的本地存儲庫,並將其保留在某處,以便您至少可以在本地恢復,即使將舊文件復制到存儲庫如有必要;-)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.