简单来说,我创建了一个像这样的git分支结构:
生成自:
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"
现在,我克隆这个结构并同步主分支
master
,A
分支和 B
分支:git clone /path-to-source/
git checkout -b master remotes/origin/master
git checkout -b A remotes/origin/A
克隆的代码库反映了源代码的层次结构:
现在我回到源文件夹,并在主分支中添加一些内容,然后重新设置 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
问题出现在我回到克隆的存储库并尝试保持这个结构时。如果我只是拉取master
分支,我会得到如下结果:
我可以去每个分支更新:
git checkout A
git pull
但我得到的分支树长这样:
问题是,如何保持干净的仓库克隆?也就是说,我想在克隆的仓库中获得这个(操作过的)图形:
奖励: 如果可能的话,我希望找到一种方法来保留在A
或B
分支中的提交记录,如下所示:
从源代码库中生成这些命令:
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:您可以假设只有一个用户对源存储库进行提交