正是我应该做的,以混帐:从别的提交,删除everythng创建一个新的分支
- 从某个创建一个新的分支提交(
git checkout -b new_one; git cherry-pick commit_id
,对吗?) - 删除其他一切
- 重命名分支
new_one
至master
?
当然,任何改变也应该推到远程。
谢谢。
正是我应该做的,以混帐:从别的提交,删除everythng创建一个新的分支
git checkout -b new_one; git cherry-pick commit_id
,对吗?)new_one
至master
?当然,任何改变也应该推到远程。
谢谢。
我会尝试这样的事:
git branch tmp <the very first commit in the repo>
git checkout tmp
git merge --squash <commit_id>
git branch -d master
git branch -m tmp master
...接着是被迫推
首先,在第一步之后显然需要'git checkout tmp'。其次,这些命令仍然为您提供唯一的提交,这是第一次提交。这不是我所问的(是的,你仍然可以重新添加,提交和推送实际文件,但我认为应该有一个更简单的方法,不是吗?) –
是的,你需要签出tmp。我修正了这一点。合并--squash将合并
创建new_branch
开始它关闭commit_id
:
git branch new_branch commit_id
退房吧:
git checkout new_branch
删除旧master
分支:
git branch -d master # you may need to use -D, with history loss may occur
重命名new_branch
到master
:
git branch -m new_branch master
请注意,这并不能消除所有的历史 - 即使执行完整垃圾回收,这commit_id
所指的任何对象将保持在git历史记录(和git对象存储)中。
但这实际上是我的问题的重点:删除历史:)。 –
为了获得一个只保存一次提交的新主,最简单的方法是创建一个新的回购,然后将master
的当前状态作为初始状态。否则,你会永远拥有master
目前的历史:
git archive --format zip --output /full/path/to/zipfile.zip master
git init .
git add . && git commit -m "initial"
remote
:git remote add ...
master
有新状态:git push -f origin master:master
那么,你的回购将只有一个分支(master
)只有一个提交。
我认为你需要解释你在这里想要达到的目标。你想重新设置一些已知的提交? – Martin
我想获得一个只有一个提交的新的主服务器(这是旧主服务器中的commit_id) –