我使用git init
创建了一个git存储库,并使用git remote add origin https://remote-url
添加了一个远程仓库URL
当我通过使用git pull origin master
来跟踪远程分支来设置必要的上游分支之后执行git branch --set-upstream-to=origin/master master
时(我的本地主分支被设置为在执行git checkout master
之后跟踪远程主分支),我可以将远程项目分支的所有修订历史记录拉入本地存储库中。
如果我可以很好地使用git pull
进行此操作,那么为什么 git 提供git clone
作为单独的命令和替代方法?它是否有任何特殊目的,还是我独自一人git pull
会错过任何事情?
答案 0 :(得分:2)
这不是一个不合理的问题。但是这个也是:
您可以运行:
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
涉及的六个步骤是:
mkdir path
,创建一个新的空目录,在其中运行git init
。 (在特殊情况下,如果您为git clone
提供现有但为空的目录的路径名,则跳过此步骤。)
git init
,以便在新目录中创建一个新的空存储库。
git remote add remote url
,其中 remote
来自您的git clone
选项-o
,或者来自您的origin
不指定此选项,而 url
是您在clone命令中指定的选项。
提供给git config
的选项中的所有其他git clone
命令。
git fetch remote
,以通过提供的URL从Git获取提交。
git checkout branch
,其中 branch
是您在-b
命令中使用git clone
选项指定的一个,或者 other Git指定的分支(如果您未指定分支),或者master
(如果另一个Git未指定任何分支)。
git clone
命令还处理在此过程中可能发生的各种错误,否则您将不得不自行处理。
git pull
命令等效于运行git fetch
,然后再执行第二个Git命令。第二个命令通常是git merge
,尽管您可以告诉Git改用git rebase
。但是git pull
还有另外一种特殊的模式:当您git pull
进入一个完全空的存储库时,就像您在问题中所做的那样,它可以将git checkout
作为第二个命令运行,而不是另一个命令两个。
注意:与git clone
不同,在六个步骤之间 很少需要使用git pull
, me 在运行第二条命令之前,需要检查git fetch
获得的提交。因此,我通常完全避免使用git pull
,因为它迫使我选择第二个命令来运行,并在获取步骤完成后立即运行它,而在提取后我想做其他事情时,之前,我选择是使用合并还是重新设置基础,或者完全使用其他方式。