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

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

我需要重置其他(现有)分支到当前的一个,没有签出。

以前:

 CurrentBranch: commit A
OtherBranch: commit B

之后:

 CurrentBranch: commit A
OtherBranch: commit A

相等于

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

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

这可能吗?

26259 次浏览

您所描述的工作流程是不等价的: 当您执行 reset --hard时,您将丢失工作树中的所有更改(您可能希望将其改为 reset --soft)。

你需要的是

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

您可以在任何时候与这个命令同步您的分支

$ git push . CurrentBranch:OtherBranch -f

也没有-f,它替换了这组命令

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

当您不需要在 CurrentBranch 中提交所有文件,因此无法切换到其他分支时,它可能非常有用。

通过运行以下命令,将 otherbranch设置为指向与 currentbranch相同的提交

git branch -f otherbranch currentbranch

-f(强制)选项告诉 git branch 是的,我真的想用新的引用覆盖任何现有的 otherbranch引用

来自 文件:

F
力量

重置为 if 已经存在。 Without-f git 分支拒绝更改现有分支。

其他答案都不错,但有点吓人。我只是提供了另一个选项,通过使用我每天使用的命令的变化,在一定程度上简单地实现了要求的目标。

简而言之,所有这些选项都不会影响您所在的当前分行或当前负责人。

git branch -C other_branch(从当前 HEAD 强制创建 other _ Branch)

将 other _ Branch 重置为不在其上的分支..。

git branch -C old_branch other_branch(从 old _ Branch 强制创建 other _ Branch)

要将 other _ Branch 重置为远程上的 some _ Branch,有一点点不同..。

git pull -f origin old_branch:other_branch(force-pull (忽略已经更新的内容) source/old _ Branch to local’s other _ Branch)

git branch -f破坏上游分支信息等。 键入一个 git update-ref命令(主要是干净地操作)是乏味和容易出错的。它可以在 .git下创建任何类型的无意义文件。

由于经常需要这种操作,可以通过一个相当安全的别名或脚本执行:

git reset-other OTHERBRANCHNAME TARGETREF

在将这个别名添加到您的配置之后:

[alias]
reset-other = "!f() { git show -s refs/heads/$1 -- && git update-ref refs/heads/$1 $2 && git show -s $1; }; f"

从命令行添加:

git config --global alias.reset-other "!f() { git show -s refs/heads/$1 -- && git update-ref refs/heads/$1 $2 && git show -s $1; }; f"

当移动成功了一个错误的目标由一个滑动你已经有 SHA 打印在屏幕上向后移动..。