我使用git init
创建了一个git存储库,并使用git remote add origin https://remote-url
添加了一个远程回购URL
当我在使用git branch --set-upstream-to=origin/master master
跟踪远程分支设置必要的上游分支后执行git pull origin master
时(我的本地主分支在执行git checkout master
后被设置为跟踪远程主分支(,我能够将远程项目分支的所有修订历史记录拉入本地repo。
如果我可以用git pull
很好地做到这一点,那么git为什么提供git clone
作为一个单独的命令和替代方案?它有什么特殊的用途吗?或者我一个人做git pull
会错过什么吗?
这不是一个不合理的问题。但这个也是:
您可以运行:
git write-tree
git commit-tree -p HEAD -m message <hash-from-git-write-tree>
git branch -f <current-branch> <hash-from-git-commit-tree>
这做了同样的事情——好吧,如果没有错误的话,它也会做——作为:
git commit -m message
那么,为什么我们有一个git commit
命令呢?
下面是一个后续问题:以下哪一个更容易使用?
git clone
命令实际上相当于运行六个命令,其中五个是Git命令。git clone
涉及的六个步骤是:
mkdirpath
,以创建一个新的空目录来运行git init
。(在特殊情况下,将现有但为空的目录的路径名赋予git clone
,在这种情况下,它将使用该路径名,则跳过此步骤。(以在新目录中创建新的空存储库。
git remote addremoteurl
,其中remote
来自git clone
选项-o
,如果未指定此选项,则为origin
,而url
是您在clone命令中指定的。提供给
git clone
的选项中的任何附加git config
命令。git fetchremote
,以在所提供的URL处从Git获得提交。git checkoutbranch
,其中branch
是您在git clone
命令中使用-b
选项指定的分支,如果您没有指定分支,则是由其他Git指定的分支;如果其他Git没有指定任何分支,则为master
。
git clone
命令还处理在此过程中可能发生的各种错误,否则您将不得不自己处理这些错误。
git pull
命令相当于运行git fetch
,然后运行第二个Git命令。第二个命令通常是git merge
,不过您可以告诉Git使用git rebase
。但git pull
还有一种特殊的模式:当您将git pull
放入一个完全空的存储库时,就像您在问题中所做的那样,它可以将git checkout
作为第二个命令运行,而不是其他两个命令中的任何一个。
注意:与git clone
不同,CCD_38在六个步骤之间很少需要任何,对于git pull
,me在运行第二个命令之前需要检查git fetch
获得的提交是很常见的。因此,我通常完全避免git pull
,因为它迫使我选择要运行的第二个命令,并在完成提取步骤后立即运行它,当我想在提取之后、之前执行其他操作时,我选择是使用merge、rebase还是完全使用其他操作。