查看Tortoise Git提供的修订图,我发现了一系列的提交,所有的提交都显示了一个孤立的分支被合并到其中。进一步的调查表明,这些孤立分支的根本提交实际上是一些存储库的未跟踪文件提交,这些存储已由我们的团队成员之一合并到我们的开发分支中。修订图中显示的所有孤立分支都来自同一团队成员,因此很明显,这是她在Git存储库管理过程中所做的事情的结果,该过程似乎包括使用上下文中的"合并到"选择存储区列表对话框中显示的存储区菜单。
我一直在互联网上搜索有关如何从分支中"删除"或以其他方式清理这些未跟踪文件提交的帮助,从而清理我们的修订图以不显示这些孤立分支。截至目前,我什么都找不到。据我所知,在包含这些孤立分支的分支头上,我看不到对实际代码库有任何不利影响,但仍希望删除或撤消它们以清理修订图提供的历史记录和视图。对于我们所遇到的情况的任何建议或见解,或对我们未曾考虑过的其他可能引起的并发症发表评论,我们将不胜感激。
感谢您的时间,
麦克风
我有一个Tortoise Git修订图和日志视图的图像,我想发布该图像以支持该问题,但我现在还没有足够的代表来做到这一点。我是一个stackoverflow新手,并且仍在尝试找出所有问题。
您是否研究了嫁接点? (stackoverflow.com/a/21623336/6309中使用的stackoverflow.com/a/1491057/6309)
您现在拥有10多个声誉,因此您可以使用上传功能将图片直接添加到帖子中。
戳,谢谢您对代表点的帮助。如果右键单击并在新选项卡中打开图像,则图像更易于阅读。
@MikeLong您可以重写历史记录吗? kernel.org/pub/software/scm/git/docs/
@onionjake感谢您提供本文档的链接。我找不到任何可用于"重写"历史记录以删除孤立的未跟踪文件隐藏提交的内容。当我们确定历史记录的必要性时,我对如何使用重新基准化和樱桃采摘来重写历史记录有很好的了解。不幸的是,我们要处理的提交的孤儿性质有些不同,因为它们没有父提交来作为基础,并且已经合并到我们主要开发分支的历史中。我只是不知道如何使用这些工具来摆脱它们。
警告:以下命令将重写历史记录,这通常是不希望的
在共享存储库上。 该答案假定这是可以接受的。
没有--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 --onto flattening
感谢您抽出宝贵的时间在这里为我说明。 我在尝试进行此操作时遇到了一些困难,我认为这与以下事实有关:在我们的情况下,注入未跟踪文件孤儿提交的合并点实际上有3个父母,而不仅仅是两个和一个 父母有一些我们想保持的变化,但我想我明白了这个主旨,可以从这里尝试一些事情。 接下来的两个星期就要放假了,只是想向您保证您的努力不会浪费。 我回来的时候我会多看。