我无法弄清楚如何将一个分支更新为与另一个分支相同。下面是一个例子:
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'
Run Code Online (Sandbox Code Playgroud)
在这一点上,我的历史看起来像这样:
A1-----A2 (master, contains a:apple, b:banana, c:carrot)
\
\----B1 (second, contains a:apple, b:beets, d:dandelion)
Run Code Online (Sandbox Code Playgroud)
现在我想向“第二个”分支添加一个提交,使其内容与“主”分支匹配,即:
A1-----A2
\
\----B1--?--B2 (desired contents a:apple, b:banana, c:carrot)
Run Code Online (Sandbox Code Playgroud)
我的问题是,我运行哪些 git 命令来执行此操作?我想出的最接近的是:
git checkout master .
git commit -m B2
Run Code Online (Sandbox Code Playgroud)
然而,虽然这将 b 重置为香蕉并恢复 c,但它不会删除文件 d。我也无法想出任何git reset我想要的变体。我不认为我想做一个版本git revert,因为在我的实际存储库中,分支上的历史记录比这个示例更复杂,并且分支可能包含合并。
任何帮助将不胜感激!
我假设当前分支是second. 如果您不满意git reset --HARD master(因为如果在任何地方发布,则需要强制推送second),您可以通过git revert B1(或者只是git revert master..second如果您不想列出所有提交,例如 B1)然后撤销 B1 git merge master。
使用@StevenPenny 的想法和ours策略,我想出了这个解决方案:
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
Run Code Online (Sandbox Code Playgroud)
这是一种theirs策略的模拟,是策略的反转ours。现在git diff master second什么也没有给出,这意味着分支是相同的。
| 归档时间: |
|
| 查看次数: |
2288 次 |
| 最近记录: |