我有一个名为git branch的签出foo.
> git status
# On branch foo
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)
它最初使用此命令检出:
> git checkout origin/foo -b foo --track
Run Code Online (Sandbox Code Playgroud)
我想从远程存储库获取此分支的更新.我知道这些命令中的任何一个都足够了:
> git fetch origin foo # ignore the lack of merging
> git pull origin foo
Run Code Online (Sandbox Code Playgroud)
如果我省略了fetchor 的参数pull,git默认会获取(或拉动)我当前检出的分支?也就是说,以下两对命令是否等效?
> git checkout foo
> git pull
Run Code Online (Sandbox Code Playgroud)
和
> git checkout foo
> git pull origin foo
Run Code Online (Sandbox Code Playgroud) 我正在学习如何通过阅读Pro Git Book的相关部分来使用Git遥控器.
如果克隆存储库,该命令会自动以名称"origin"添加该远程存储库.因此,git fetch origin从您克隆(或最后从中获取)之后,获取已推送到该服务器的任何新工作.
请务必注意,该git fetch命令仅将数据提取到本地存储库; 它不会自动将其与您的任何工作合并或修改您当前正在处理的工作.准备好后,您必须手动将其合并到您的工作中.
这是我试过的.我克隆了一个存储库并编辑了一个文件.在原始存储库中,有人更新了同一个文件并推送.然后,
我跑git fetch.它显示了一些更新进度消息.但是,git log没有显示更新.我误解了什么git fetch吗?我错过了什么吗?
我跑了git pull,我得到了
错误:您对"hello_world.c"的本地更改将被合并覆盖.中止.请在合并之前提交更改或存储更改.
在这里,我相信它也在合并并避免意外数据丢失,它会中止.
编辑: 谢谢你的回答.实际上在查看答案之前,我正在尝试自己,并通过以下命令/输出实现了相同的功能:
$ git ls-remote origin
d0006a6bfa95e0e90aa820a0e50d31a548625652 HEAD
d0006a6bfa95e0e90aa820a0e50d31a548625652 refs/heads/master
$ git ls-remote .
14375458b8a6b84f82d9fa4d2ded0bb8c9e87431 HEAD
14375458b8a6b84f82d9fa4d2ded0bb8c9e87431 refs/heads/master
d0006a6bfa95e0e90aa820a0e50d31a548625652 refs/remotes/origin/HEAD
d0006a6bfa95e0e90aa820a0e50d31a548625652 refs/remotes/origin/master
Run Code Online (Sandbox Code Playgroud)
还有以下命令:
$git log origin --oneline
$git log --oneline
Run Code Online (Sandbox Code Playgroud)
谢谢你支持我的愚蠢问题;-)
通常在Windows上使用git(例如git push和git pull)时,它有时会非常慢.git pull一次又一次地运行在大多数时间内在两秒内返回,但大约1/6的尝试大约需要一分钟.
我已经设定git config --global core.preloadindex并且git config --global core.fscache为真.
跑步后的例子 set GIT_TRACE=1
慢:
$ git pull
14:11:03.166594 git.c:371 trace: built-in: git 'pull'
14:11:03.168594 run-command.c:350 trace: run_command: 'fetch' '--update-head-ok'
14:11:03.186596 git.c:371 trace: built-in: git 'fetch' '--update-head-ok'
14:11:03.189596 run-command.c:350 trace: run_command: 'git-remote-https' 'origin' 'https://[...].git'
14:11:03.204598 run-command.c:350 trace: run_command: 'git credential-manager get'
14:11:46.400917 git.c:607 trace: exec: 'git-credential-manager' 'get'
14:11:46.400917 run-command.c:350 trace: run_command: 'git-credential-manager' 'get'
14:11:47.828059 run-command.c:350 trace: run_command: 'git credential-manager store' …Run Code Online (Sandbox Code Playgroud) 我发现后者比第一个更快,所以git fetch每当我需要将本地分支与远程同步时,我通常会这样做.有什么区别,如果有的话?
使用refspec是一种方便的方法来获取远程分支并创建一个类似但具有给定名称的方法(或者反过来:创建一个具有与本地名称不同的给定名称的远程分支).我对一件小事感到困惑 - 因为拉也将与当前分支合并我期望不同的行为来自:
git fetch origin master:mymaster
Run Code Online (Sandbox Code Playgroud)
从
git pull origin master:mymaster
Run Code Online (Sandbox Code Playgroud)
上述两个命令似乎产生完全相同的结果 - 这是一个名为mymaster的本地分支,与origin/master相同.我是对的还是两者之间有一个模糊的区别?
最后,使用的Refspec将创建一个本地分支没有一个跟踪分支,对不对?因为在没有任何参数AFAIK的情况下调用git push时,会自动推送跟踪分支
我几天前分叉了一个GitHub项目,从它的问题开始,我可以看到主分支从那时起就进行了一些修改.
当我cd到这个项目的位置目录并使用git pull它时,它说"已经是最新的".为什么?
如何更新我的fork以包含来自原始仓库的提交?
我有本地更改和远程更改.
有人告诉我,我必须先推,然后拉.这有什么原因吗?
我之前使用过其他版本控制系统,但对git和github几乎没有经验.
我想为一个项目做贡献,所以我在github上分叉,获取我的fork的本地副本,编辑它,提交它,将更改推回到我的github fork,并打开一个pull请求,让原始的上游作者看起来在.一切似乎都很好.作者说他会稍微使用它.
但是现在我想用第二个拉取请求解决项目的第二个问题.但我提交和推送的所有内容最终都会附加到第一个拉取请求中.我想要做的是为后续更改发出新的第二次拉取请求,而第一次拉取请求仍处于暂挂状态,尚未合并到上游.
我需要执行哪些步骤才能执行此操作?我正在使用git-bash.
每次我想推送我的提交(git commit -m "message",git push origin <branch>),我都会拉(git pull origin <branch>).
有没有办法让git在执行推送之前做一下拉?(在同一个分支上)
在git-config文档中有关pull.rebase的信息:
pull.rebase
如果为true,则rebase在获取的分支顶部分支,而不是在运行"git pull"时合并默认远程的默认分支.请参阅"branch..rebase"以在每个分支的基础上进行设置.
注意:这是一个可能危险的操作; 除非您了解其含义,否则不要使用它(有关详细信息,请参阅git-rebase(1)).
谁能详细描述一下"NOTE: this is a possibly dangerous operation; do not use it unless you understand the implications (see git-rebase(1) for details)"是什么意思?