“与”的区别是什么;git重置“;vs";git rebase“;?

“与”的区别是什么;git重置“;vs";git rebase“;?,git,Git,我一直在玩git(仍然非常noob),我想知道“重置”和“重设”之间的区别。一个比另一个更强大吗 假设我想从历史记录中删除3个粗体的提交,使用哪一个更好,或者我应该标记它,然后用git tag-d删除它 17a64df 2012-06-21 | Hello使用style.css(HEAD,origin/style,master), a6792e4 2012-06-21 |添加css样式表 801e13e 2012-06-21 |添加自述 5854339 2012-06-21 |增加了index.

我一直在玩git(仍然非常noob),我想知道“重置”和“重设”之间的区别。一个比另一个更强大吗

假设我想从历史记录中删除3个粗体的提交,使用哪一个更好,或者我应该标记它,然后用
git tag-d
删除它

17a64df 2012-06-21 | Hello使用style.css(HEAD,origin/style,master),
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 |此回复提交A6FAF60631B5FBC6EE79B52A1BDADC4971B69EF8
a6faf60 2012-06-21 |回复“哎呀,我们不希望这次提交”
a006669 2012-06-21 |哎呀,我们不希望这次提交
262d1f7 2012-06-21 |添加了HTML标题(v1)
b1846e5 2012-06-21 |添加了标准HTML页面标签(v1测试版)
bf1131e 2012-06-21 |增加了HI标签
02b86d0 2012-06-21 |首次提交


他们完全不同。使用工作目录和索引上的引用,而不接触任何提交对象(或其他对象)。另一方面,用于重写以前创建的提交对象

因此,如果您想重写历史,您需要的就是git-rebase。请注意,您应该永远不要重写已推送并可供其他人使用的历史记录,因为重定基址会重写对象,使其与旧对象不兼容,从而导致其他相关人员陷入混乱

话虽如此,你想做的是。使用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就会重写您的历史记录。同样,如果您已经推动了更改,请不要执行此操作。一般来说,在历史上有这样的承诺是完全正确的。

我希望这个外行的解释是正确的

git reset和git rebase都会影响本地分支。它们将强制您的本地分支与某个提交同步。区别在于:

  • “git reset--hard{commit id}”将在本地历史记录中使用提交
  • “git-rebase-origin/{branch-name}”将使用repo中的最新提交
  • 其他信息

    何时使用重置

    比如说,你完成了你的工作,并在当地做出了承诺。然后你的猫走过键盘,不知怎的,你不小心把猫的工作交给了你。使用重置

    何时使用rebase

    假设您重构了一个函数/类的名称,这个更改会影响许多文件。当您提交并尝试推送到origin时,您意识到您的同事已经做了一些重要的更改,并且已经将其推送到origin。假设您认为再次重构名称(使用IDE)比遍历所有冲突文件更容易,您可以选择重新设置基础,这将删除您的工作并保持同事的工作不变

    为什么每个答案/教程都包含这么多技术免责声明


    因为重置和重设基础都可以永久删除本地更改。因此,用户需要知道如何使用策略(例如创建备份分支)来保持其工作。

    从重基中删除行是否与将单词“pick”更改为“s”表示挤压相同?@ninjax或No,删除行将完全删除提交以及它们从历史记录中引入的更改。就好像从未做出过承诺。例如,如果删除添加了一行的提交,则该行将不会出现在重新基准后的任何后续提交中。另一方面,挤压仍然会保留提交中引入的更改,而只是摆脱单独的提交本身。