GITLAB:如何将整个分支推送到另一个分支
GITLAB: How to push ENTIRE branch to another one
我的目标很容易解释,但我找不到任何方法来做到这一点。
假设我有 3 个分支机构。 A、B 和 C
A -------.
\--------.----------- B
\
.-------------- C
我只是想将整个分支 "C" 推送到分支 "B"。让我解释一下:我不想保留我在 B 创建 C 之后所做的任何事情它。我只是希望 B 具有与分支 C 完全相同的代码。
我怎样才能安全地做到这一点?
两者之间的差异超过 10,000 个文件,因此无法手动选择。
我尝试了几种方法,包括 git 合并 "theirs" 策略,但我仍然遇到很多冲突。
无论潜在冲突文件的数量或代码差异如何,这三个命令中的任何一个
# if you don't need to checkout the branch immediately
git branch -f B C
# if you DO want to checkout the branch immediately
git checkout -B B C
# if you branch B is ALREADY checked out
git reset --hard C
将使 B
指向与 C
相同的提交,使它们完全相同,代码和历史。没有冲突解决,没有合并,它是即时的。
请注意,这被认为是对 B
最近历史的重写,因此如果您与任何人共享分支 B
,则不要使用它。
它还会在 C
分支后取消引用 B
上的任何提交,因此如果您有任何疑问,请事先使用 [= 备份 B
24=]
git branch backup-B B
最后...您忘记备份而后悔了吗? git reflog
将列出 HEAD
之前的位置,你会在那里找到 B
,用 git reset --hard <old position hash>
恢复它,或者用 [= 为 inspection/reuse 添加句柄23=]
如果您只想放弃 B
独有的所有更改,请将其删除:
git branch -d B
签出 C
并从中创建一个新的 B
:
git checkout C
git branch B
B
现在与 C
完全相同。
结帐 B 然后重置 HEAD
git checkout B
git reset --hard C
没有theirs
策略。有一个 -X theirs
选项 ,但这不是策略。 Git称它为"strategy option",这个名字不好听:听起来像是一个提供策略的选项,但实际上,它是一个到一些other策略,-s
选项中的那个,这里默认为-s recursive
。我将 -X
称为 "eXtended option" 以帮助避免将其与 -s
选项混淆。
有关 为什么 没有 -s theirs
的说明,即使曾经有过,请参阅 this answer by VonC。
此处其他答案中的各种重置方法(git checkout -B
、git reset --hard
等)通常是可行的方法。但是,如果您想轻松地产生 -s theirs
策略的 效果 ,请参阅 jthill's answer to Is there a "theirs" version of "git merge -s ours"?
我的目标很容易解释,但我找不到任何方法来做到这一点。 假设我有 3 个分支机构。 A、B 和 C
A -------.
\--------.----------- B
\
.-------------- C
我只是想将整个分支 "C" 推送到分支 "B"。让我解释一下:我不想保留我在 B 创建 C 之后所做的任何事情它。我只是希望 B 具有与分支 C 完全相同的代码。
我怎样才能安全地做到这一点?
两者之间的差异超过 10,000 个文件,因此无法手动选择。
我尝试了几种方法,包括 git 合并 "theirs" 策略,但我仍然遇到很多冲突。
无论潜在冲突文件的数量或代码差异如何,这三个命令中的任何一个
# if you don't need to checkout the branch immediately
git branch -f B C
# if you DO want to checkout the branch immediately
git checkout -B B C
# if you branch B is ALREADY checked out
git reset --hard C
将使 B
指向与 C
相同的提交,使它们完全相同,代码和历史。没有冲突解决,没有合并,它是即时的。
请注意,这被认为是对 B
最近历史的重写,因此如果您与任何人共享分支 B
,则不要使用它。
它还会在 C
分支后取消引用 B
上的任何提交,因此如果您有任何疑问,请事先使用 [= 备份 B
24=]
git branch backup-B B
最后...您忘记备份而后悔了吗? git reflog
将列出 HEAD
之前的位置,你会在那里找到 B
,用 git reset --hard <old position hash>
恢复它,或者用 [= 为 inspection/reuse 添加句柄23=]
如果您只想放弃 B
独有的所有更改,请将其删除:
git branch -d B
签出 C
并从中创建一个新的 B
:
git checkout C
git branch B
B
现在与 C
完全相同。
结帐 B 然后重置 HEAD
git checkout B
git reset --hard C
没有theirs
策略。有一个 -X theirs
选项 ,但这不是策略。 Git称它为"strategy option",这个名字不好听:听起来像是一个提供策略的选项,但实际上,它是一个到一些other策略,-s
选项中的那个,这里默认为-s recursive
。我将 -X
称为 "eXtended option" 以帮助避免将其与 -s
选项混淆。
有关 为什么 没有 -s theirs
的说明,即使曾经有过,请参阅 this answer by VonC。
此处其他答案中的各种重置方法(git checkout -B
、git reset --hard
等)通常是可行的方法。但是,如果您想轻松地产生 -s theirs
策略的 效果 ,请参阅 jthill's answer to Is there a "theirs" version of "git merge -s ours"?