我有两个不相关的分支,主人和配置的git repo。 我创建了配置,清除了所有文件,然后只放入配置文件中。 现在我想在远程仓库上推送它,但因为它是新的,空分支(没有我所有更改的日志和原始分支的旧版本)。
我如何清除所有历史并推动它?
答案 0 :(得分:122)
清除所有文件并没有消除历史记录。您需要先创建一个没有历史记录的分支,然后添加配置文件。这些天git checkout
有一个--orphan
选项,可以创建一个没有历史记录的分支。以下是--orphan
选项的信息:
- 孤儿< new_branch>
创建一个名为< new_branch>的新孤儿分支,从< start_point>开始。并切换到它。在这个新分支上进行的第一次提交将没有父级,它将成为与所有其他分支和提交完全断开的新历史的根。
调整索引和工作树,就像之前运行“git checkout< start_point>”一样。这允许您开始记录一组类似于< start_point>的路径的新历史记录。通过轻松运行“git commit -a”来进行root提交。
当您想要从提交中发布树而不公开其完整历史记录时,这可能很有用。您可能希望这样做以发布项目的开源分支,该分支的当前树是“干净的”,但其完整历史记录包含专有或其他受阻的代码。
如果要启动记录一组与< start_point>完全不同的路径的断开连接的历史记录,则应在运行“git”创建孤立分支后立即清除索引和工作树rm -rf。“从工作树的顶层。之后,您将准备好准备新文件,重新填充工作树,从其他地方复制它们,提取tarball等。
以下是checkout文档的链接。您也可以运行git help checkout
。
一旦创建了没有历史记录的分支,那么当您将其推送到服务器时,它也不会具有该历史记录。 FWIW,它帮助我将git push
视为“使远程分支与我的本地分支看起来一样”。所以,如果你有历史和推动,它将有历史。如果不这样做,则推送的分支不会。
答案 1 :(得分:20)
如何清除所有历史并将其推送?
$('#list-search').select2({
minimumInputLength: 3,
ajax: {
url: ajax_post_params.ajax_url,
dataType: 'json',
data: function (term, page) {
post_type = $(this).attr("data-post-type");
return {
action: 'list_posts',
list_search: term,
post_type: post_type
};
},
processResults: function (data, params) {
console.log(data);
console.log(params);
params.page = params.page || 1;
return {
results: data.items,
pagination: {
more: (params.page * 30) < data.total_count
}
};
},
cache: true
}
});
然后你可以运行你的
git checkout --orphan <name_you_choose_for_orphan_branch>
git commit
<小时/> CF。 this one-liner
答案 2 :(得分:15)
我需要这样做才能向自由职业者发送一些代码,而无需共享私人信息或删除我的历史记录。
如果您有任何人使用SourceTree,我就是这样做的。如果我做错了或忘记了某些事情,请告诉我,因为我对源代码管理非常不熟悉。
当我检查bitbucket时,似乎这似乎有效并且丢弃了我的提交历史。
希望这可以帮助别人。