file1.txt git add file1.txt git commit -6ren">
gpt4 book ai didi

git - 如何在 Git 中保持分支层次结构?

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

简单地说,我创建了一个像这样的 git 分支结构:

enter image description here

生成自:

git init
echo "Hello World" > file1.txt
git add file1.txt
git commit -m "Hello world"
git checkout -b A
echo "This is from A branch" > file2.txt
git add file2.txt
git commit -m "from A branch"
git checkout -b B
echo "This is from B branch" >> file2.txt
git commit -a -m "from B branch"

现在我克隆这个结构并同步 masterAB 分支:

git clone /path-to-source/
git checkout -b master remotes/origin/master
git checkout -b A remotes/origin/A

并且克隆的存储库反射(reflect)了源层次结构:

enter image description here

现在我返回到源文件夹并向 master 和 rebase A 和 B 添加一些内容:

cd /path-to-source/
git checkout master
echo "more files" > file3.txt
git add file3.txt
git commit -m "Improved master"
git checkout A
git rebase master
git checkout B
git rebase A

enter image description here

当我返回克隆的存储库并尝试保留此结构时,问题就来了。如果我只是 pull master 分支,我得到这个:

enter image description here

我可以去每个分支更新:

git checkout A
git pull

但我得到这样的分支树:

enter image description here

问题是,如何保持存储库的干净克隆?是的,我想在克隆的存储库中获取这个(操作图形):

enter image description here

奖励:如果可能的话,我想找到一种方法来保持 AB 分支中的提交,如下所示:

enter image description here

从源存储库中的这些命令生成:

git checkout A
echo "something" > other.txt
git add other.txt
git commit -m "Other A commit"
git checkout B
git rebase A

注意 1:如果有帮助,克隆的存储库永远不会提交注意 2:您可以假设只有 1 个用户提交到源存储库

最佳答案

rebase 意味着更改 SHA1,因此您的克隆中的分支 A 不再有效。

您可以按照“How do I recover/resynchronise after someone pushes a rebase or a reset to a published branch?”恢复克隆的分支A(灵感来自“RECOVERING FROM UPSTREAM REBASE”部分)。

但是如果:

  • 这些 rebase 经常发生,
  • 您在分支 A 和分支 B 的克隆上没有任何新提交

您可能只想根据它们的 origin/Aorigin/B 重置这些分支(在克隆上):您重置分支 A 前往 origin/A

git branch -f origin/A

关于git - 如何在 Git 中保持分支层次结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14541185/

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