gpt4 book ai didi

git - 将本地提交移动到 un-master 本地分支

转载 作者:太空狗 更新时间:2023-10-29 14:44:36 25 4
gpt4 key购买 nike

我的情况比较复杂,因为我对git不熟悉;

我在远程有一个主提交,我在本地创建了一个名为 fix-bug-online-offline-support 的分支。在我工作期间,另一个团队成员更改了远程主机,我 pull 了它。

但我需要将我的分支 fix-bug-online-offline-support 拆分为两个分支;

  • 名称为:fix-bug-online-support
  • 另一个名称为:fix-bug-offline-support

我已将分支名称 fix-bug-online-offline-support 更改为 fix-bug-online-offline-support

并且需要将一些提交从 fix-bug-online-support 移动到 fix-bug-offline-support

注意:这两个分支都是本地分支,我有提交的哈希字符串

最佳答案

简答:您可以使用 cherry-pick进行提交并将其放入 fix-bug-offline-supportrebase -i然后从原始分支中删除提交。

长答案:据我了解,你有这样的事情

A - B - C - D - E
L fix-bug-offline-support

你想以这样的方式结束

A - C' - E'
\ L fix-bug-offline-support
\
- B' - D'
L fix-bug-online-support

你可以这样做:

git checkout A # replace A with the sha1 of this commit for instance
git checkout -b fix-bug-online-support
git cherry-pick B
git cherry-pick D

此时我们有

A - B - C - D - E
\ L fix-bug-offline-support
\
- B' - D'
L fix-bug-online-support

所以我们仍然需要从 fix-bug-offline-support 中删除那些提交,我们用

git checkout fix-bug-offline-support
git rebase -i A

以及来自 rebase -i 之后出现的文本编辑器命令,删除B对应的行和 D

最后的微妙之处:请注意,我们实际上并不是在“移动”提交。我们宁愿创建新的提交。这听起来像是一种迂腐的细微差别,但实际上,如果我们没有对这些细微差别给予足够的重视,Git 可能会非常难以理解。所以,澄清一下:

  • 提交是我们项目的快照并且是不可变的(例如:它有一个唯一且永远不会改变的 sha1)
  • 当我们 cherry-pick ,我们实际上在其他地方重新应用补丁,并且 git 最终使用新的 sha1 创建一个新的提交(例如:这就是为什么在上面的图表中提交 B 变成了提交 B' :他们是不是同一个对象)
  • 当我们删除一个提交时,同样的事情:实际上 git 会在没有这些补丁的情况下重新应用历史,因此它最终会创建新的提交 C'E'

一个实际的推论是初始提交 E在我们的操作结束时仍然存在。我们不在乎,因为我们不需要它,而且无论如何它不再可以从分支访问,所以它不会阻止我们。但这是个好消息,因为如果我们发现我们搞砸了,我们仍然可以找回它

关于git - 将本地提交移动到 un-master 本地分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35860385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com