Git从树和工作目录中删除过去的提交

时间:2014-07-03 18:42:28

标签: git git-squash

目前,我的git树看起来像这样

                 master
                   ^
                   |
                Commit 3
                   ^
                   |
                Commit 2
                   ^
                   |
                Commit 1
                   ^
                   |
           remote/origin/master

我想要做的是,从提交2和3中删除它们从未存在的更改,然后推送更改。我隐藏了一些未提交的更改(它们主要是配置文件和makeFiles,因此我不想让它们存在于树中)。另外,我想知道最好的流程是什么,这样我就不会像现在这样弄乱我的工作目录。请帮忙

GIT中-新手,

感谢。

1 个答案:

答案 0 :(得分:2)

rebase是你的朋友。 rebase命令提供交互式模式,您可以在其中决定如何为指定提交范围内的每个提交执行操作。

最简单的方法就是在远程rebase分支上master

git rebase -i origin/master master

你告诉git {@ 1}}它的远程对应的主分支。没有rebase标志(交互式),这将有效地做任何事情。

现在你的配置编辑器应该打开,你应该看到这样的东西:

-i

现在要删除提交,您只需从文件中删除相应的行。所以看起来应该是这样的:

pick abcdefg Commit 1
pick hijklmn Commit 2
pick opqrstu Commit 3
(... maybe more commits)

# Here will be comments which explain what's going on ...

现在关闭编辑器,git将pick abcdefg Commit 1 (... maybe more commits) # Comments can stay ... rebase分支顶部指定的提交。

您可以从GitPro书籍或Changing History Chapter中的rebase documentation了解有关互动式变基的更多信息。

希望有所帮助!