gpt4 book ai didi

git - 将提交移动到不同的分支

转载 作者:太空狗 更新时间:2023-10-29 14:28:54 26 4
gpt4 key购买 nike

我想知道是否有一种简单的方法可以将提交从分支 A 移动到分支 B。

我在“开发”分支上工作,然后创建了一个新分支,假设是“featureA”开始开发新功能。我做了 2 次提交,但第一个应该去“开发”而不是“featureA”,因为它只是一个小修复,但我忘了更改分支,所以我可以简单地将提交 1 移动到分支“开发”并将其删除来自“featureA”?

变化仍然没有被推送,只是本地的。

我将不胜感激。

最佳答案

在这种特殊情况下很容易。要了解原因,请绘制(部分)提交图。

你从这样的事情开始:

...--o--*   <-- develop (HEAD), origin/develop

然后您创建了一个新的分支名称,feature,指向相同的 tip-of-develop commit *。您将 HEAD 附加到新分支,给出:

...--o--*   <-- develop, feature (HEAD), origin/develop

现在你做了两个新的提交。我们称它们为 AB 而不是使用它们的真实散列 ID,它们又大又丑又容易忘记。提交 A 作为其父级提交 *,并且提交 B 将提交 A 作为其父级,并且名称 feature 现在指向提交 *:

...--o--*   <-- develop, origin/develop
\
A--B <-- feature (HEAD)

单独留下 feature,让我们告诉 Git 移动名称 develop 以指向提交 A,这是您想要的小修复你的开发:

...--o--*   <-- origin/develop
\
A <-- develop
\
B <-- feature

我暂时删除了附加的 HEAD,因为有多种方法可以像这样调整 develop 并且 HEAD 可能会在我们重新附加时重新附加做他们。这是您想要的最终画面:根本没有更改任何提交,但是您的本地名称 develop 现在指向第一个提交,而 feature 指向第二个提交。

那么:我们应该怎么做呢?

一个非常安全的方法(不会丢失任何工作)是先git checkout develop,然后使用git merge --ff-only 快进开发 到正确的提交。那是提交 A,这是从 feature 退一步,所以我们可以这样做:

git checkout develop
git merge --ff-only feature~1

这将使您的 develop 指向提交 A(并且您的 HEAD 附加到 develop,所以你必须 git checkout feature 才能继续。

另一种方法是检查 develop 并使用 git reset --hard 将标签 develop 移动到任意提交(同时也更新你的索引/暂存区和你的工作树)。这与上面的基本相同,但它允许您将名称移动到任何地方,即使这不是一个明智的举动,所以上面的可能更可取。

另一种方法是使用 git branch -f 强制将名称移动到您想要的位置:

git branch -f develop feature~1

这会使您的 HEAD 附加到 feature,这样您就不必 git checkout feature 来继续工作。但是,与 git reset 方法一样,它不是很安全,因为它允许您将名称移动到任何 提交,即使这毫无意义。

最后,有一个非常偷偷摸摸的方法可以在不检查 的情况下以快进方式更新 develop(a la git merge --ff-only)开发——事实上你需要留在其他分支上来做它:

git push . feature~1:develop

这让你的 Git 调用你自己的 Git,并建议它应该移动名称 develop 指向通过解析 feature~1< 获得哈希 ID 的提交。当且仅当这是快进时,您的 Git 才会服从您的 Git,因为这里没有强制标志。

使用你喜欢的任何一个;除了你的 HEAD 附加的位置之外,它们最终都获得了相同的结果。

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

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