当从git存储列表合并时,如何删除或清除孤立的“未跟踪文件”提交分支合并到目标分支?

看看Tortoise
Git提供的修订图,我发现了一系列提交,这些提交都显示了一个孤立的分支被合并到它中.更多的调查显示,这些孤立分支的根提交实际上是由我们的团队成员合并到我们的开发分支中的一些存储的未跟踪文件提交.修订图中显示的所有孤立分支都来自同一个团队成员,因此很明显这是她在Git存储库管理过程中所做的事情的结果,似乎包括使用上下文中的“合并到”选项隐藏列表对话框中显示的存储的菜单.

我一直在搜索interweb以获取有关如何“删除”或以其他方式清理这些未跟踪的文件提交从我们的分支到反过来清理我们的修订图以不显示这些孤立分支的帮助.截至目前,我还没有找到任何东西.在我的决定中,我看不到包含这些孤立分支的分支头的实际代码库的任何不利影响,但仍希望删除或撤消它们以清理修订图提供的历史和视图.对我们所处的情况提出任何建议或见解,或者对我们未考虑可能源于此的其他可能的并发症发表评论将非常感激.

谢谢你的时间,
麦克风

最佳答案 警告:以下命令
rewrites history通常是不合需要的

 在共享存储库上.这个答案假定这是可以接受的.

没有–preserve-merges的git rebase应该可以很好地工作:

这是我测试它的方式:

mkdir test_orphan
cd test_orphan/
git init
echo "new file" > file1
git add file1
git commit -m "mainline"
echo "some changes" >> file1
git commit -a -m "some changes"
git checkout --orphan orphan
echo "orphan changes" >> file2
git add file2
git commit -a -m "orphan changes"
git checkout master
git merge orphan
echo "additional changes" >> file1
git commit -a -m "more changes"

这应该会产生这样的历史(git log –decorate –oneline –graph):

* 976e170 (HEAD, master) more changes
*   7bbc2da Merge branch 'orphan'
|\  
| * 4a9d9c0 (orphan) orphan changes
* c2a9ecb some changes
* 1523991 mainline

现在重新定义这些变化:

git rebase 1523991

结果在如下所示的树中:

* 3b63a46 (HEAD, master) more changes
* c56d554 orphan changes
* daa016c some changes
* 1523991 mainline

如何在不破坏所有合并提交的情况下将此应用于您的情况?

> git checkout -b flattening
> git rebase
> git checkout master
> git rebase -p – 扁平化

点赞