Git:如何交换本地和远程的 2 个分支 (Github)

标签 git github version-control git-extensions

有人可以提供一种清晰、简单的方法来使用 Git 交换 2 个分支上的名称,并将 Github 作为远程存储库吗?

场景如下:

  1. 我在 master 之外创建了一个 dev 分支。
  2. dev 上进行 1 次提交后,我创建了分支 exp(实验)。
  3. 我再次检查了 dev 并进行了 2 次提交。
  4. 然后我意识到我真的希望 exp 成为进行这 2 次提交的分支,所以我想交换 expdev

我在这方面还很陌生,我已经阅读了一些可视化的 Git 教程并搜索了这个网站和谷歌,但我仍然不清楚在 Git 中修复这个问题的最佳或预期方法(尤其是 -使用 Github 远程仓库)


My Bad 试图解决这个问题:

我已经尝试了一些方法,但弄得一团糟——使用 Git 扩展重命名本地分支,但无法让远程 Github 存储库反射(reflect)该更改。 我尝试创建新的分支,但不能总是让它们同时反射(reflect)在本地和远程(无论我在哪里创建它们)。

我终于能够通过 Git Extensions main pull 函数和“Prune remote branches”获得我需要的一切,它似乎使用 fetch --prune - 这将远程删除反射(reflect)回本地,以及启用了一些强制/删除选项的push 功能。

一开始我想我可能只能重置/移动两个分支(即将 exp 移至 dev,然后将 exp 重置回 dev 所在的提交(返回 2),但是当尝试在 Git Extensions 中重置时,它要求我选择软重置、混合重置或硬重置——这让我停下来走另一条路,尝试重命名/创建新分支等。也许这是正确的轨道——如果是这样,我应该做一个软重置或硬重置 - 或者在提交任何打开的更改后都不重要?我对此进行了大量搜索,甚至了解工作目录、索引和分支,但在我的情况下仍然不清楚。


问题

必须有更好的方法来完成这项工作 - 我如何轻松地交换两个分支(或重命名 2 个分支以便它们有效地交换),以一种所有更改都在本地和远程(在 Github 上)反射(reflect)的方式?

如果您能深入了解为什么您的方法是正确或最简单的方法,我将不胜感激。谢谢!


注意:我确实找到了this question关于重命名 master(或任何分支)——但是那里有很多步骤。我可以这样做两次,但我很难相信这是最好的方法。

最佳答案

分别从expdev创建两个新分支exp2dev2

$ git checkout exp
$ git branch exp2          # create new branch 'exp2' from 'exp'

$ git checkout dev
$ git checkout -b dev2     # create and checkout to `dev2` branch

删除本地和远程的 devexp 分支。

$ git branch -D dev        # delete local 'dev' branch
$ git push origin :dev     # delete remote 'dev' branch

$ git branch -D exp        # delete local 'exp' branch
$ git push origin :exp     # delete remote 'exp' branch

dev2 创建一个新的本地分支 exp 并推送到远程。

# make sure you are in 'dev2' branch

$ git checkout -b exp
$ git push origin exp

exp2 创建一个新的本地分支 dev 并推送到远程。

$ git checkout exp2        # checkout to 'exp2' so, current branch is 'exp2'
$ git checkout -b dev      # create new branch 'dev' 
$ git push origin dev      # push 'dev' branch to remote 

现在,如果一切正常,则删除本地 exp2dev2 分支。 (可选)

$ git branch -D dev2      # delete local 'dev2' branch
$ git branch -D exp2      # delete local 'exp2' branch 

关于Git:如何交换本地和远程的 2 个分支 (Github),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45539209/

相关文章:

python - 在 CircleCi 构建中引用外部私有(private) Git 存储库

github - 在其他设备上注销 Github 网站

version-control - 通过 Crouton 在 Chromebook 上本地访问 Google Drive

ruby - 你检查你的 rvmrc 文件吗?

GitHub:我可以在不对它们进行版本控制的情况下提供对已编译文件的访问吗?

Git: merge 一个分支但没有一些我只需要在本地修改的文件?

git - 通过 SSH 从远程服务器推送 git 提交 : Permission denied (publickey). 致命:无法从远程存储库读取

git - .gitattributes 中的 merge 策略不起作用

authentication - Vundle不对github进行身份验证

c# - 命名空间结合 TFS/Source Control 解释