怎么知道我是否要退缩?

时间:2013-12-30 09:34:12

标签: git

git documentation在几个地方提到not to rebase if the code has been pushed to a public repository Here is an example。如果执行rebase的每个操作都包含rebase命令,那么这将是一个简单的规则:

$ git rebase foobar

但是,我已经看到它提到其他命令(即reset)也可以在幕后执行rebase。因此,“thall shall rebase”规则变得更难以遵循,因为用户可能不知道他正在运行的命令将包含rebase。

用户如何知道哪些命令执行rebase,以避免它们?

2 个答案:

答案 0 :(得分:4)

正如评论中指出的那样,实际问题是改变已经分享的历史(例如:推动)。

例如,如果你有:

A -- B -- C
 \        L master | origin/master
  \ 
   -- D

如果您在提交master上重新定位D,那么您将拥有

A -- B -- C
 \        L origin/master
  \ 
   -- D -- B' -- C'
                 L master

如您所见,如果您按master,则当前的origin/master将会丢失。

如果你做git reset --hard HEAD^会发生同样的事情,因为它会改变

A -- B -- C
          L master | origin/master

A  -- B  ------ C
      L master  L origin/master

正如您所看到的,当您知道命令应该做什么时,很容易理解它是否会改变历史。

如果有疑问,在执行操作后,您可以使用gitk --all显示分支,以查看本地和远程分支是否仍处于同步状态。

还有一个最后的安全网:Git会阻止你推送一些会改变历史的东西(你可以推动这种推动(git push -f),但至少在你不知道的情况下就不会发生这种情况)。

答案 1 :(得分:1)

通常,您需要阅读您将要使用的命令的文档,并在问自己一个问题时应用一些常识:

此操作是否会更改我本地git存储库的图形?

如果您的答案是肯定的,则需要检查是否已按下将要更改的部件。