删除所有提交但保留所有文件更改

时间:2019-06-20 13:45:10

标签: git github

我在分支上进行了10次提交,更改了15个文件。现在,我只想保留文件更改,而不提交。

方法现在我希望一次提交进行15个文件更改。

  

git reset --hard commit_id
  git push --force

以上命令对我们没有帮助。

编辑:

我想将分支移动到一个特定的提交,同时保持当前提交中发生的所有文件更改。然后要在一次提交中添加所有未隐藏的更改。

有可能吗?

3 个答案:

答案 0 :(得分:4)

当问题被标记为重复时(在蒂姆的回答之前),允许我提供作为评论发布的答案:

git reset --soft HEAD~10
git commit -m "there, my 10 commits squashed"

如果您已经将该分支放置在其他远程分支上(如果您已将已删除的修订版本推送到那里),则需要使用Tim强制执行的推送(很好)。

答案 1 :(得分:2)

也许这里最简单的方法是进行软重置,返回10次提交,然后重新提交:

git reset --soft HEAD~10
git commit -m 'squash 10 commits into just one commit'
git push --force origin your_branch

此软重置技巧背后的想法是,我们将HEAD指针移回10次提交。这会将您的10次提交中的所有更改放入阶段,同时使工作目录保持不变。然后,当您重新提交时,您可以有效地创建一个包含所有10个提交中的工作的提交。

请注意,通常需要强行推送,因为此选项会重写分支的历史记录。

另一种方法是使用交互式变基,并为要压缩的提交选择squash。此选项还将重写历史记录。

答案 2 :(得分:1)

这是创建一个新分支“ your-branch-3”,然后从另一个分支“ your-branch-2”中检出每个文件:

git checkout master
git checkout -b your-branch-3
git diff your-branch-2 --name-only | xargs -I{} git checkout your-branch-2 -- {}

--name-only

  • 仅输出文件名路径

xargs -I

  • 用从标准输入中读取的名称替换初始参数中{}的出现。

git-checkout branch --