有人能用一种清晰,简单的方法将两个分支上的名称与Git交换,Github作为远程存储库吗?
以下是该方案:
我是相当新的,我已经浏览了一些视觉Git教程并搜索了这个网站和谷歌,但我仍然不清楚在Git中解决这个问题的最佳或有意方式(特别是 - 使用Github远程仓库)
我已经尝试了一些东西并搞砸了它 - 用Git Extensions重命名本地分支,但是无法获得远程Github仓库来反映这种变化。 我尝试创建新的分支,但不能总是让它们反映在本地和远程(无论我在哪里制作)。
我终于能够通过Git Extensions主要 pull 功能和“Prune远程分支”来获取我需要的所有内容,它似乎使用 fetch 和 --prune - 这反映了远程删除回本地,以及启用了一些强制/删除选项的推送功能。
我一开始认为我可能只能重置/移动两个分支(即将exp移动到dev,然后将exp重置回dev开启的提交(2返回),但是当尝试在Git Extensions中重置时,它要求我选择一个柔和,混合或硬重置 - 这让我停下来走另一条路线试图重命名/创建新的分支,等等。也许这是正确的轨道 - 如果是这样,我应该做一个软重写或硬重置 - 或者在提交任何开放更改后不重要?我做了很多搜索,甚至理解工作目录,索引和分支,在我的情况下仍然不清楚。
必须有更好的方法来完成这项工作 - 如何轻松交换两个分支(或重命名2个分支以便它们有效地交换),以便所有更改都在本地和远程反映(在Github上)吗
如果您的方法是正确或最简单的方法,我将不胜感激。谢谢!
注意:我确实找到了关于重命名master(或任何分支)的this question - 但是有很多步骤。我可以做两次,但我发现很难相信这是最好的方法。
答案 0 :(得分:3)
假设您描述的提交历史记录如下:
A---B---… master
\
C---D---E dev
|
exp
您可以使用以下命令:
git checkout exp
git merge dev
git push origin exp
git checkout dev
git reset --hard head~2
git push -f origin dev
然后提交历史记录将是:
A---B---… master
\
C dev
\
D---E exp
原因是您可以重命名分支名称,但这种方式更有效。
注意:如果您与其他人合作并且dev
分支上有新的更改,您可以在temp
的新分支中备份更改首先是git pull origin dev
和git checkout -b temp origin/dev
。将您的本地exp
换成dev
后,您可以选择或合并其他开发人员从temp
到dev
的更改。
答案 1 :(得分:2)
分别从exp2
和dev2
创建两个新分支exp
,dev
。
$ 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
删除您的本地和远程dev
和exp
分支。
$ 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
从exp
创建一个新的本地分支dev2
并推送到远程。
# make sure you are in 'dev2' branch
$ git checkout -b exp
$ git push origin exp
从dev
创建一个新的本地分支exp2
并推送到远程。
$ 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
现在,如果一切正常,则删除本地exp2
和dev2
分支。 (可选)
$ git branch -D dev2 # delete local 'dev2' branch
$ git branch -D exp2 # delete local 'exp2' branch
答案 2 :(得分:1)
重新命名两个分支只是为了重新定位一些提交听起来有点像拿起一个房子并旋转它只是为了拧下一个灯泡。
我认为最简单的方法是移动提交,而不是尝试重命名分支。一种简单的方法是从dev
挑选两个提交到exp
,然后从dev
中删除两个提交
git checkout exp
git cherry-pick <SHA-1 of first dev commit>
git cherry-pick <SHA-2 of first dev commit>
然后从dev
中删除两个提交:
git checkout dev
git reset --hard HEAD~2
请注意,如果您已将dev
推送到GitHub 并且其他人可能已撤消该分支,那么您应该还原这两个提交:
git checkout dev
git revert A^..B
此处A
是第一次提交,B
是第二次提交。请注意,git revert
会添加新提交,在这种情况下,会在功能上撤消要删除的dev
上的两个提交。因此,dev
最终会有三次提交,但就好像现在exp
上的两次提交从未在dev
上进行。