将其他分支重置为当前分支而无需签出


110

我正在为Git工作流程编写一些脚本。

我需要将其他(现有)分支重置为当前分支,而无需签出。

之前:

 CurrentBranch: commit A
 OtherBranch: commit B

后:

 CurrentBranch: commit A
 OtherBranch: commit A

当量

 $ git checkout otherbranch 
 $ git reset --soft currentbranch
 $ git checkout currentbranch

(注意--soft:我不想影响工作树。)

这可能吗?


有人知道在Egit中这是否还可能吗?
zedoo

Answers:


84

您描述的工作流程并不相同:执行时,reset --hard您会丢失工作树中的所有更改(您可能想要这样做reset --soft)。

您需要的是

git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch

3
伙计,我希望这个工作在没有多余的情况下refs/heads/
ELLIOTTCABLE

41
一个更好的方法是git push . current:other。这在不使用refs/heads(/ cc @elliottcable)的情况下有效,并且还阻止您更新已检出的分支。请注意,+current:other如果更新不是快速转发,则可能需要传递-f(或使用)。
莉莉巴拉德

4
您也可以使用-m 'some text'参数记录git reflog OtherBranch命令显示参考更新的原因,例如“同步到CurrentBranch”。记住为什么以后再做可能很有用。
Levi Haskell

18
为什么要使用,git update-ref refs/heads/OtherBranch refs/heads/CurrentBranch或者git push . CurrentBranch OtherBranch什么时候可以使用更清洁的(IMO)git branch -f OtherBranch CurrentBranch?(请参阅下面有关git branch -f的答复
Colin D Bennett

1
@BenHymers因此,“ git push”的手册页是该死的谎言。它将该命令描述为“ Update remote refs ...”。实际上,它可以更新本地引用就可以了。
哈兹2015年

228

设置otherbranch为指向与currentbranch运行相同的提交

git branch -f otherbranch currentbranch

-f(力)选项告诉git branch 是的,我真的要覆盖任何现有的otherbranch与新的参考

文档中

-F
--force

重置为如果已经存在。没有-f,git分支拒绝更改现有分支。


6
这是最简单的答案。谢谢!
罗伯特·卡尔

fatal: Cannot force update the current branch.当我尝试这样做时,我得到了。
Fuad Saud 2014年

4
@FuadSaud这是因为您已经otherbranch签出了。这样的问题特别是关于将另一个分支重置为不同的提交(即不重置已签出的分支)。您要执行的操作是重置当前分支,git reset targetbranch以强制指向当前分支targetbranch。添加--hard也将工作树强制到该内容。或--soft不理会索引而仅更改分支本身。
Colin D Bennett 2014年

对,所以,我知道重置。我正在寻找的是一种在例程内始终将本地主机指向上游/主机的方法,而与检出内容无关。我以为branch -f可以做到。
Fuad Saud 2014年

9
伊莫,这应该是公认的答案。这极大地改善了我的工作流程!
致命吉他

23

您可以随时与此命令同步分支机构

$ git push . CurrentBranch:OtherBranch -f

同样在没有-f的情况下,它替换了这组命令

$ git checkout OtherBranch
$ git merge CurrentBranch
$ git checkout CurrentBranch

当您不需要在CurrentBranch中提交所有文件,因此您无法切换到另一个分支时,它会很有用。


可能会导致“远程:错误:拒绝非快进”
Basilevs 2014年

3
-f除非绝对必要,否则我不会选择。在我看来,如果没有它,它会很好地工作。
Melebius
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.