簡體   English   中英

Git - 重命名有 2 個提交推送到遠程的本地分支

[英]Git - Rename a local branch which has 2 commits pushed to remote

我有一個跟蹤遠程分支的分支,並且我做了 2 次提交,這些提交已被推送到遠程分支,但尚未 PR 並合並到 master 中。

我現在需要重命名我的本地分支,將其推送到遠程,然后 PR 並將該分支合並到 master。

這個工作流程是否正確? 在此先感謝...相對不熟悉 Git 的大部分內容,所以我很感激任何意見。

  1. 在本地分支上取消設置上游分支
  2. 重命名本地分支
  3. 將本地分支推送到遠程
  4. 創建 PR 將新分支合並到 master

嗨伙計,我希望你了解我的工作流程。 首先,我們必須重置主人。 只是讓你沒有其他人合並一些東西,這會讓你更難。

  1. 結帳主人並拉出當前的“狀態”
$ git checkout master
$ git pull
$ git log
  1. 在您的 2 個合並提交后復制提交 ID
  2. 重置主人(確保你做什么!)
$ git reset --hard <commit-id-that-you-copied>
  1. 查看本地主日志
git log
  1. 刪除您的遠程分支(已合並)並重命名您的本地分支,然后再次推送
$ git push <remote_name> :<branch_name>
(e.x. git push origin:your_local_branch
  1. 重命名本地分支
$ git branch -m <your_new_name>
  1. 向上游推送新分支並創建 PR
git branch --set-upstream-to=origin/your_new_name

這是最簡單的方法,但要確定你在做什么。

(一般來說,你不應該太擔心分支的名稱)

您可以創建一個新分支並刪除舊分支。

  1. git checkout this_name_was_right_and_the_time
  2. git checkout -b feature/this_name_is_definitely right
  3. git push
  4. 從新分支創建 PR
  5. 刪除舊分支

我發現這里的答案有點偏離目標,或者有點稀疏,所以我想我會跟蹤一個分支重命名並提供一個完整的答案。 該解決方案完全在本地命令行上執行。

因此,根據 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM