如何将主分支的当前状态复制到另一个分支?

4

我已经尝试了这个页面上被接受的答案:如何将当前分支合并到另一个分支中

但问题是,主分支没有任何需要修改的内容,并且我是通过 git checkout -b mybranch 命令创建的分支。

当我尝试使用 git push self mybranch:master 命令时,它告诉我一切都是最新的。但我知道这不是真的。我只是想将分支复制到另一个分支,以便它具有主分支的当前状态。而且它将永远不会再被触及。

在未来,我只会从主分支创建新的分支。这个其他的分支实际上永远不会被触及。但我需要对其进行归档,以便在需要时,我可以切换到该分支并随时恢复它...

如何在不创建新存储库的情况下复制主分支?

3个回答

5

正如Zoli Szabo的答案中所指出的,您应该使用标签来标记历史事件,这些事件不应该移动。要创建标签,只需提供其名称和应指向的提交即可。如果您提供的是分支名称而不是提交哈希值,则该标签将指向此分支的当前最新提交。

git tag mytag branch
git tag mytag 123ab45ef

但是,为了回答您的问题,如果要使您的分支反映出主干的当前状态,您有几个选项:
  • 强制更新分支:git branch -f mybranch master,然后推送该分支
  • 将您想要的状态推送到远程仓库中的分支:git push origin master:mybranch(如果需要强制更新,则使用-f)。请注意,这可能会给其他人带来问题
  • 使用ours策略(-s ours)合并分支,以创建一个具有所需状态的新提交。然后推送到远程仓库。

如果您只想更新本地仓库,请合并分支(如果我正确理解您的问题,应该会产生一种快进),或进行本地推送。

  • 合并:git checkout master; git merge mybranch
  • 本地推送:git push . mybranch:master

推动是快进合并的反向操作(目标和目的地分支互换)。

请选择 :)


git branch -f original:master 这个命令并没有给我一个有效的分支 original:master,但原始分支确实存在。git branch -a 显示了原始分支。 - Solomon Closson
@SolomonClosson:抱歉,那个冒号不应该在那里。应该是一个空格字符。 - knittl
谢谢,我刚刚使用了一个标签,希望它能实现我想要的功能。 - Solomon Closson
我不得不执行 git push --force,因为 master 分支落后于几个(无用的) commits - Aakash

1

如果要标记历史上的特定点,应使用tags,而不是“废弃”的分支。


同意。标签更好地表达了提交链不处于活跃开发状态。 - Gregg

0
一个主分支只能指向一个提交,不能有两个不同的主分支指向不同的提交。如果要保存主分支在某个时间点的状态,可以在它上面创建一个标签或新建一个分支。可以将一个分支保存为 MYSUBDIR/master ,另一个分支保存为 MYOTHERSUB/master。
要在 remote 'self' 上创建一个名为 'MySave/master' 的分支,其尖端与本地 mybranch 相同。
git push self mybranch:MySave/master

假设您当然拥有适当的权限。 您可以使用以下命令查看两个分支的状态:
git log --oneline --decorate -9 mybranch self/MySave/master

'self/MySave/master' 是你的远程跟踪副本,要获取最新的,请执行以下操作:

git fetch self self/MySave/master

这会更新 'self/MySave/master'(但不会更新你本地的 'mybranch',如果需要更新本地分支请使用 pull 命令)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接