在 Git 中执行 'pull' 前是否需要进行 'remote update'?

6

假设我已经从c:\执行了以下操作,那么从远程源获取最新代码的正确方法是什么?

# Create repo...
mkdir Test
cd Test
git init
...create files
git add .
git commit -a -m "Init Commit"

# Clone repo...
cd ..
git clone Test TestClone

# Edit original
cd Test
...edit files
git commit -a -m "Init Edit"

# Go back to Clone
cd ..\TestClone

# Get latest code
# Now what??? pull or update then pull
3个回答

5

其他人可能只是告诉你简单的方法:pull。但是因为你实际上询问了关于“远程更新”的问题...

remote update 是用于“从远程更新我们所知道的所有内容”的高级命令。它会获取新的分支,可以修剪旧的分支,并且可以对任意组的远程进行此操作,或者对所有远程进行此操作。它仅更新远程跟踪分支(名称类似于origin/master);它不会触及您的分支。如果这种更新是您想要执行的操作,那么这就是适合您的命令。通常希望检查远程中的内容,而不将其合并到任何分支中,而且清除过时的分支的能力也非常好。

如果您只想将适当的远程分支合并到当前分支中,则git pull是正确的命令。在此过程中,它确实会更新某些远程分支,但这不是它的主要目的。


4
Git会自动在克隆的代码库中设置远程origin,并配置您的分支在拉取时从origin上对应的分支合并。在这种情况下,您只需要执行git pull命令即可。

@Terry 我的意思是,当你克隆时,git会将你的本地分支设置为与“等效”的远程分支合并。稍后,当你拉取时,git会将你当前的分支与它所跟踪的任何远程分支合并。这不一定是同名的远程分支(即“等效”);例如,本地分支'my_feature'可以设置为跟踪远程分支'some-remote/some-other-feature'。对于造成的困惑,我很抱歉。 - user229044
最后一个问题...当你在任何命令中提到origin(远程),它是否总是访问真正的远程而不是远程的某个本地副本?即git diff --name-status master..origin/master - 是否会访问真正的origin代码或本地目录/remotes/origin/master中的'repo'?这是我在链接上感到困惑的地方。 - Terry
@Terry Git 总是与本地数据一起工作。您必须执行“获取”/“更新远程”才能从远程检索最新数据; “拉取”相当于“获取”和“合并”,它会为您执行此操作。 - user229044
@meagar - 最后一个问题(我甚至知道fetch,merge,pull ;)) ... git push(到远程)是否会隐式执行pull?正在搜索但没有找到明显的匹配来回答问题。 - Terry
@Terry 不会,但是如果本地分支不是最新的话,推送将失败。 - user229044
显示剩余4条评论

1

从阅读git help来看,我认为remote update就像fetch

git pull结合了git fetchgit merge。因此,执行git pull将获取远程的更改并将其合并到您的工作树中。

当您想要从远程获取更新但不希望它们与本地更改混合在一起时,可以使用git fetch。这对于离线、检出一个新的本地分支(与当前分支无关)以及仅查看其他人正在进行的工作非常有用。

只有在需要进行高级远程操作时才需要执行git remote update更多讨论请参见此问题

因此,如果只是获取最新版本,请使用git pull


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接