gpt4 book ai didi

git:如何用另一个分支的内容重置分支?

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

我不知道如何将一个分支更新为与另一个分支相同。这是一个例子:

git init test; cd test
echo apple >a; echo banana >b; git add a b; git commit -m 'A1/a:apple;b:banana'
echo carrot >c; git add c; git commit -m 'A2/c:carrot'
git checkout -b second HEAD^1
echo beets >b; echo dandelion >d; git add b d; git commit -m 'B1/b:beets;d:dandelion'

此时我的历史是这样的:

A1-----A2     (master, contains a:apple, b:banana, c:carrot)
\
\----B1 (second, contains a:apple, b:beets, d:dandelion)

现在我想向“second”分支添加一个提交,使其内容与“master”分支匹配,即:

A1-----A2
\
\----B1--?--B2 (desired contents a:apple, b:banana, c:carrot)

我的问题是,我要运行哪些 git 命令来执行此操作?我想出的最接近的是:

git checkout master .
git commit -m B2

然而,虽然这会将 b 重置为 banana 并恢复 c,但它不会删除文件 d。我也无法想出任何符合我要求的 git reset 变体。我不认为我想做一个版本的 git revert,因为在我的实际存储库中,分支上的历史记录比这个例子更复杂,并且分支可能包含 merge 。

任何帮助将不胜感激!

最佳答案

我假设当前分支是second。如果你对 git reset --HARD master 不满意(因为如果 second 在任何地方发布,它需要强制推送),你可以通过 git revert B1 撤销 B1 (如果您不想列出所有提交,例如 B1,则只需 git revert master..second)然后 git merge master

将@StevenPenny 的想法与我们的 策略相结合,我想出了这个解决方案:

git checkout master
git checkout -b transfer_second_to_master
git merge -s ours second
git checkout second
git merge transfer_second_to_master
git branch -d transfer_second_to_master

这是对他们的策略的一种模拟,作为我们的策略的反转来完成。而现在 git diff master second 什么也没给出,这意味着分支是相同的。

关于git:如何用另一个分支的内容重置分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15800145/

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