Git 除最后一次提交外,删除以前的所有提交

Git 除最后一次提交外,删除以前的所有提交,git,Git,我是Git的新手。我想从分支TAI-18中删除以前的所有提交,但最后一个提交除外,并且只想推送最新的一个提交,以便拉取请求与主请求合并 例如: commit_c commit_b commit_a 其中commit_a是初始提交,除了commit_c之外,我想删除所有提交,如commit_b和commit_a 有人能帮我吗?有人: commit_c commit_b commit_a commit_0 执行git rebase-i commit_0,您将看到vi接口(或其配置方式): 更改(

我是Git的新手。我想从分支
TAI-18
中删除以前的所有提交,但最后一个提交除外,并且只想推送最新的一个提交,以便拉取请求与主请求合并

例如:

commit_c
commit_b
commit_a
其中
commit_a
是初始提交,除了
commit_c
之外,我想删除所有提交,如
commit_b
commit_a

有人能帮我吗?

有人:

commit_c
commit_b
commit_a
commit_0
执行git rebase-i commit_0,您将看到vi接口(或其配置方式):

更改(按i键插入操作)
选择要删除的
删除
/
d
/
#
之一。它将与所有更改一起永久删除

当您说要保留更改时进行更新,只需使用一次提交,然后您就可以将
pick
替换为
squash
/
s
(除了
commit\u c
)。它会将更改的内容从该提交移动到上一个提交


如果您的
commit\u a
是初始提交,只需重置所有提交并重新执行您的历史记录,即可进行提交:

commit_c
commit_b
commit_a
commit_0
执行git rebase-i commit_0
,您将看到vi接口(或其配置方式):

更改(按i键插入操作)
选择要删除的
删除
/
d
/
#
之一。它将与所有更改一起永久删除

当您说要保留更改时进行更新,只需使用一次提交,然后您就可以将
pick
替换为
squash
/
s
(除了
commit\u c
)。它会将更改的内容从该提交移动到上一个提交



如果您的
commit\u a
是初始提交,只需重置所有提交并重新执行历史记录即可

原始问题: 最简单的方法可能是创建一个包含旧分支内容的新孤立分支:

git checkout commit_c    #Checkout latest commit on your branch
git checkout --orphan new_branch_name
git commit
写一些合理的提交消息来描述这个提交是对旧分支的挤压。如果看起来没有问题,现在可以将原始分支指针移动到此提交:

git branch -f original_branch_name
更新问题:

似乎您正在寻找的是壁球合并:

git checkout master
git merge --squash TAI-18
这将获取在
TAI-18
分支上引入的所有更改,并在主分支上创建包含所有这些更改的提交


如果主分支上同时更新了相同的文件,则可能存在冲突,您必须解决这些冲突。

原始问题: 最简单的方法可能是创建一个包含旧分支内容的新孤立分支:

git checkout commit_c    #Checkout latest commit on your branch
git checkout --orphan new_branch_name
git commit
写一些合理的提交消息来描述这个提交是对旧分支的挤压。如果看起来没有问题,现在可以将原始分支指针移动到此提交:

git branch -f original_branch_name
更新问题:

似乎您正在寻找的是壁球合并:

git checkout master
git merge --squash TAI-18
这将获取在
TAI-18
分支上引入的所有更改,并在主分支上创建包含所有这些更改的提交


如果主分支上同时更新了相同的文件,则可能存在冲突,您必须解决这些冲突。

如果您不想保留回购历史记录,为什么不重新创建它?将您的工作树复制到一个新目录中,然后执行
git init
,您就可以开始了。当您说“删除提交”时,您的意思是“删除他们引入的更改”还是“假装我进行了一次包含所有内容的提交”?是的,所有内容都将包含在一个commit中,即最后一个commit@LasseVågsætherkarlseny最简单的解决方案可能是删除
.git
目录(首先备份所有内容),然后使用git init创建一个新的存储库。
,然后添加并提交一个新的first commit(第一次提交)。如果不想保留回购的历史记录,为什么不重新创建它呢?将您的工作树复制到一个新目录中,然后执行
git init
,您就可以开始了。当您说“删除提交”时,您的意思是“删除他们引入的更改”还是“假装我进行了一次包含所有内容的提交”?是的,所有内容都将包含在一个commit中,即最后一个commit@LasseVågsætherkarlseny最简单的解决方案可能是删除
.git
目录(首先备份所有内容),然后使用
git init.
创建一个新的存储库,然后添加并提交一个新的first commit(第一次提交),按照您希望的方式提交。可能的重复请根据对问题的评论修改此答案。请根据对问题的评论修改此答案。@BDesh我现在对问题的理解完全不同。以前,您似乎希望删除所有以前的提交,包括初始提交。现在,我的解释是,你只想挤压合并。看看这一点,这在这里可能很有用。你能澄清一下“初始提交”是指“回购中的第一次提交(即,当你做
git log
时看到的最后一次提交)”(这通常被称为初始提交),还是指“在您的
TAI-18
分支从
master
“?@b我现在对这个问题的理解完全不同了。以前,您似乎希望删除所有以前的提交,包括初始提交。现在,我的解释是,你只想挤压合并。看看这一点,这在这里可能很有用。你能澄清一下“初始提交”是指“回购中的第一次提交(即,当你做
git log
时看到的最后一次提交)”(这通常被称为初始提交),还是指“在您的
TAI-18
分支从
master
分支后,在该分支上进行的第一次提交?”?