我一直在玩git(仍然非常菜鸟),我想知道"重置"和" rebase"之间的区别。一个比另一个强大吗?
假设我想从历史上删除3个大胆的提交,这将更好地使用,或者应该标记它然后将其删除git tag -d <tagname>
?
17a64df 2012-06-21 |Hello使用style.css(头,原始/样式,主),
A6792E4 2012-06-21 |添加了CSS样式表
801E13E 2012-06-21 |添加了读数
5854339 2012-06-21 |添加了index.html
0B1DD4C 2012-06-21 |将hello.html移至lib
55649C3 2012-06-21 |添加作者/电子邮件评论
9B2F3CE 2012-06-21 |添加了作者评论
CDB39B0 2012-06-21 |使用文本提交P标签(v1.1)
B7B5FCE 2012-06-21 |这将恢复为A6FAF60631B5FBC6EE79B52A1BDAC4C971B69EF8。
A6FAF60 2012-06-21 |恢复"糟糕,我们不想要这个提交"
A006669 2012-06-21 |糟糕,我们不想这个提交
262D1F7 2012-06-21 |添加了HTML标题(V1)
B1846E5 2012-06-21 |添加了标准HTML页面标签(V1-Beta)
BF1131E 2012-06-21 |添加了嗨标签
02B86D0 2012-06-21 |首先提交
答案
他们完全不同。git-reset
与Refs一起工作,在您的工作目录和索引上,而无需触摸任何提交对象(或其他对象)。git-rebase
另一方面,用于重写先前制作的提交对象。
因此,如果您想重写历史记录,git-rebase
是你想要的。请注意,您应该never重写历史记录并被其他人使用,因为重新编写使它们与旧物体不兼容的对象,从而给其他任何人带来了一团糟。
话虽这么说,你想做的是交互式变基。使用它调用git rebase -i 262d1f7
您应该会收到如下所示的提示:
pick 262d1f7 Added HTML header (v1)
pick a006669 Oops, we didn't want this commit
pick a6faf60 Revert "Oops, we didn't want this commit"
pick b7b5fce This reverts commit a6faf60631b5fbc6ee79b52a1bdac4c971b69ef8.
pick cdb39b0 Commit p tags with text (v1.1)
pick 9b2f3ce Added an author comment
pick 55649c3 Add an author/email comment
pick 0b1dd4c Moved hello.html to lib
pick 5854339 Added index.html
pick 801e13e Added README
pick a6792e4 Added css stylesheet
pick 17a64df Hello uses style.css (HEAD, origin/style, master),
在那里,只需删除您想要删除的提交的行,保存并退出编辑器,Git 将重写您的历史记录。don’t do this如果您已经推动了更改。总的来说,在历史上有这样的承诺是完全可以的。