Alb*_*ert 802 git git-branch
我有master
跟踪远程分支的分支origin/master
.
我想将它们重命名为master-old
本地和远程.那可能吗?对于跟踪的其他用户origin/master
(以及经常更新其本地master
分支的用户git pull
),重命名远程分支后会发生什么?他们git pull
仍然会工作还是会抛出一个它再也找不到的错误origin/master
?
然后,继续,我想创建一个新的master
分支(本地和远程).再说一次,在我这样做之后,如果其他用户这样做会发生什么git pull
呢?
我想这一切都会带来很多麻烦.是否有一种干净的方式来获得我想要的东西?或者我应该保持master
原样,并创建一个新的分支,master-new
然后继续在那里工作?
bdo*_*lan 601
最接近重命名的是删除然后在遥控器上重新创建.例如:
git branch -m master master-old
git push remote :master # delete master
git push remote master-old # create master-old on remote
git checkout -b master some-ref # create a new local master
git push remote master # create master on remote
Run Code Online (Sandbox Code Playgroud)
然而,这有很多警告.首先,没有现成的检出会了解重命名-蹦也不会尝试跟踪分支重命名.如果新的master
还不存在,git pull将会出错.如果master
已创建新的.拉动将尝试合并master
和master-old
.所以这通常是一个坏主意,除非你得到了之前检查过存储库的每个人的合作.
注意:默认情况下,较新版本的git不允许您远程删除主分支.您可以通过将receive.denyDeleteCurrent
配置值设置为远程存储库warn
或ignore
在远程存储库上来覆盖它.否则,如果您已准备好立即创建新主服务器,请跳过该git push remote :master
步骤,然后--force
转到该git push remote master
步骤.请注意,如果您无法更改遥控器的配置,则无法完全删除主分支!
此警告仅适用于当前分支(通常是master
分支); 可以删除任何其他分支并如上所述重新创建.
Ari*_*zis 255
假设您目前在master
:
git push origin master:master-old # 1
git branch master-old origin/master-old # 2
git reset --hard $new_master_commit # 3
git push -f origin # 4
Run Code Online (Sandbox Code Playgroud)
master-old
分支.origin
master
origin/master-old
分支创建一个新的本地分支(它将自动正确设置为跟踪分支).master
希望它指向的任何提交.master
在origin
存储库中强制更改以反映您的新本地master
.(如果您以任何其他方式执行此操作,则至少需要再执行一步以确保master-old
正确设置以跟踪origin/master-old
.在撰写本文时,其他任何解决方案都不包括此内容.)
Exc*_*bur 155
使用Git v1.7,我认为这已经略有改变.现在,更新本地分支对新远程的跟踪引用非常简单.
git branch -m old_branch new_branch # Rename branch locally
git push origin :old_branch # Delete the old branch
git push --set-upstream origin new_branch # Push the new branch, set local branch to track the new remote
Run Code Online (Sandbox Code Playgroud)
小智 35
git checkout -b new-branch-name
git push remote-name new-branch-name :old-branch-name
Run Code Online (Sandbox Code Playgroud)
您可能必须new-branch-name
在删除之前手动切换到old-branch-name
dno*_*zay 29
有很多方法可以重命名分支,但我将重点关注更大的问题:"如何让客户快进,而不必在本地搞乱他们的分支".
这实际上很容易做到; 但不要滥用它.整个想法取决于合并提交; 因为它们允许快进,并将分支的历史链接到另一个分支.
# rename the branch "master" to "master-old"
# this works even if you are on branch "master"
git branch -m master master-old
Run Code Online (Sandbox Code Playgroud)
# create master from new starting point
git branch master <new-master-start-point>
Run Code Online (Sandbox Code Playgroud)
# now we've got to fix the new branch...
git checkout master
# ... by doing a merge commit that obsoletes
# "master-old" hence the "ours" strategy.
git merge -s ours master-old
Run Code Online (Sandbox Code Playgroud)
git push origin master
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为创建merge
提交允许将分支快速转发到新修订.
renamed branch "master" to "master-old" and use commit ba2f9cc as new "master"
-- this is done by doing a merge commit with "ours" strategy which obsoletes
the branch.
these are the steps I did:
git branch -m master master-old
git branch master ba2f9cc
git checkout master
git merge -s ours master-old
Run Code Online (Sandbox Code Playgroud)
Cas*_*bel 11
我假设你仍在询问与前一个问题相同的情况.也就是说,master-new在其历史中不会包含master-old.*如果你称为master-new"master",你将有效地重写历史记录.无论你如何进入一个主人不是以前的主人位置的后代的状态,只是它处于那种状态.
试图在主人不存在时拉动的其他用户只会让他们的拉动失败(远程没有这样的参考),一旦它再次存在于新的地方,他们的拉动将不得不尝试将他们的主人与新的远程主人合并,就像在存储库中合并master-old和master-new一样.考虑到你在这里尝试做什么,合并会产生冲突.(如果它们被解决了,并且结果被推回到存储库中,那么你将处于更糟糕的状态 - 那里的两个版本的历史.)
简单地回答你的问题:你应该接受有时你的历史会有错误.这没关系.它发生在每个人身上.git.git存储库中有还原的提交.重要的是,一旦我们发布历史,这是每个人都可以信任的东西.
*如果确实如此,这相当于将一些更改推送到master,然后创建一个新的分支.没问题.
我尝试时,所选答案失败了.它抛出一个错误:refusing to delete the current branch: refs/heads/master
.我想我会发布对我有用的东西:
git checkout master # if not in master already
git branch placeholder # create placeholder branch
git checkout placeholder # checkout to placeholder
git push remote placeholder # push placeholder to remote repository
git branch -d master # remove master in local repository
git push remote :master # remove master from remote repository.
Run Code Online (Sandbox Code Playgroud)
诀窍是在将其推送到远程存储库之前检查到占位符.其余的是自我解释,删除主分支并将其推送到远程存储库应该现在工作.摘录自此处.
归档时间: |
|
查看次数: |
276909 次 |
最近记录: |