【问题标题】:Switching a branch type after commit提交后切换分支类型
【发布时间】:2017-04-23 05:10:37
【问题描述】:

我有三个分支,main branchdevelopment branchnew_feature 分支。

问题是我不小心在development branch 上设置了我的第一个提交(初始提交)。

我的问题的屏幕截图:

我的分支机构的完整概述: 问题:如何将其更改为main branch

【问题讨论】:

标签: android git android-studio version-control


【解决方案1】:

因为您还没有将远程分支(origin/development 和 origin/new_feature)合并到本地 repo。所以有两种情况

不需要远程更改。请按以下步骤操作:

  1. 创建一个新的“初始提交”。 git checkout master, git checkout --orphan master1 然后git commit
  2. 基于它的 Rebase 开发分支。 git checkout developmentgit rebase master1 (如果有冲突文件,请使用 git add filenamegit rebase --continue)。
  3. 删除 master 和 new_feature 分支。 git branch -D mastergit branch -D new_feature
  4. 重命名分支。 git branch -m master1 mastergit checkout mastergit branch new_feature
  5. 强制推送到远程。 git push -f --all

需要远程更改。请按照以下步骤操作:

  1. 将远程更改合并到本地。 git checkout development, git merge origin/development, git checkout new_feature, git merge origin/new_feature
  2. 创建一个新的“初始提交”。 git checkout master, git checkout --orphan master1 然后git commit
  3. 基于它的 Rebase 开发分支。 git checkout developmengit rebase master1
  4. 在其上重新设置 new_feature 分支。 git checkout new_featuregit rebase master1
  5. 重命名主分支。 git branch -D mastergit branch -m master1 master
  6. 强制推送到远程。 git push -f --all

【讨论】:

  • 谢谢!但是我可以问一下普通的branchremote branch有什么区别吗?为什么当我尝试创建一个新分支时,还会创建一个remote
  • 是的,当然。本地分支只是“为”远程分支“工作”,远程分支确实是您进行版本控制的地方。并且本地分支可以跟踪远程分支(可以通过git branch -a查看连接关系)。当您创建一个新的本地分支并希望将其推送到远程时,默认情况下它将在远程创建相同的分支。 git pushgit push origin newbranch:newbranch 相同。假设要将本地新分支推送到远程master分支,可以使用git push origin newbranch:master
  • 谢谢!另一件事,你提到了remote changesremote changes 是什么意思?你什么时候想要remote changes?貌似和远程分支和本地分支合并有关。
  • 远程更改是指origin/new_featureorigin/development 的提交ID。正如您分享的图片一样,我们可以发现origin/new_featureorigin/development 与本地的new_featuredevelopment 分支指向不同的提交ID。这意味着您仅从远程获取但未合并本地更改。所以在你重新组织你的分支顺序之前,你应该决定是否将远程更改合并到本地。
【解决方案2】:

您可以使用您的 master 分支 merge 您的开发分支或使用您的 master 分支中的 cherry-pick 命令来检索您的初始提交。

【讨论】:

    【解决方案3】:
    git push -u origin development//(push it up to development)
    git checkout main //checkout local main branch
    git pull origin development //Pull latest from remote development branch into main
    git add -A
    git commit -m "get latest from development"
    git push -u origin //push up to main
    

    【讨论】:

      【解决方案4】:

      你可以重命名你的开发分支。

      $ git checkout development                 # checkout development
      $ git checkout -b development-backup       # backup development branch
      $ git branch -D master                     # delete your current local master 
      $ git branch -m development master         # rename development -> master
      $ git checkout master                      # checkout master
      $ git push -f origin master                # force push, update remote master
      

      【讨论】:

      • 我没有看到任何理由:1)将dev 分支重命名为master,他仍然有远程dev 分支要跟踪,非常重要的是他的master 有不同使用dev 散列 2) 强制 更新到远程主控,refs/remotes/origin/master 没有任何问题,他只需要resetrevert 操作,然后与远程分支保持同步. cherry-pickrebase master -> checkout master -> merge dev 将是我的选择。
      猜你喜欢
      • 2020-10-23
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 2018-01-22
      • 2011-10-23
      • 1970-01-01
      • 2016-11-29
      • 1970-01-01
      相关资源
      最近更新 更多