我有一个名为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) 如果git fetch被例如Ctrl-C中断或由连接问题引起,那么之后git fetch也git pull无法工作.
user@computer:~/code/openttd-git$ git fetch
^C
user@computer:~/code/openttd-git$ git fetch
error: Unable to find 22d90742fc79a9011fb86ee03d8aeea66bc12657 under http://git.openttd.org/openttd/trunk.git
Cannot obtain needed object 22d90742fc79a9011fb86ee03d8aeea66bc12657
error: Fetch failed.
Run Code Online (Sandbox Code Playgroud)
我相信这与存储库无关.使用git clone创建这个破碎的本地资源库的拷贝到一个新的本地存储库不解决这个问题.到目前为止,我所知道的唯一解决方案是git clone将整个远程存储库(origin/master)转换为新的本地存储库.但是有没有更好(更快)的解决方案?
有Debian的bug报告有最后的消息,从2011年2月这是相同的错误我还是有已经有修补程序或任何解决方案或解决方法呢?我的git版本是1.7.10.
如果我在不跟踪任何远程分支的本地分支上,并且我发出命令
git fetch
Run Code Online (Sandbox Code Playgroud)
鉴于我已经定义了几个遥控器$GIT_DIR/config,远程是从哪个遥控器完成的?
我试图从手册页中找到,但这一点对我来说还不清楚.
另外:如何在不进行本地分支跟踪的情况下更改此默认远程?
我正在学习如何通过阅读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)
谢谢你支持我的愚蠢问题;-)
使用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上有一些回购,有人将它分叉并添加了新功能并启动了拉取请求.我不能自动合并它,因为我想先解决一些小问题.
这是一次性活动,我永远不需要这个远程存储库,所以我不想创建本地remote分支.
基本上我想做:
怎么做?
git checkout git://github.com/xxx/xxx.git 根本不起作用(失败并出错)
git fetch git://github.com/xxx/xxx.git 有效但不更新任何东西
git svn fetch工作怎么样?提取的分支在哪里,以便我可以与我的主人或其他分支合并或改组?获取的数据在哪里,因为git remote我的git svn存储库中没有提供任何内容?
我对git很新,我在操作上遇到了麻烦fetch.
我正试图从他的存储库中获取同事的进度.起初我做了git fetch HEAD,它促使git下载了大约350MB的数据,所以我确信它已经做了一些事情.然而,origin/master最终仍然指向相同的旧提交(实际上它在名称下,dev但我会称之为master- 他没有master).
在那之后我尝试了,git fetch origin master但它似乎没有做任何事情,它只是更新FETCH_HEAD.我标记了FETCH_HEAD提交,所以我不会丢失它,但我仍然希望有一个更新的远程分支.
出了什么问题?我无权访问远程存储库.我还可以在家里修理吗?
目前,当我拉动时,我会从所有分支机构进行更改:
$ git pull
remote: ...
Unpacking objects: ...
From ssh://github.com/...
a69d94d..a2019da master -> origin/master
b684d4a..b8819dc develop -> origin/develop
+ 263c644..f1c1894 gh-pages -> origin/gh-pages (forced update)
Updating a69d94d..a2019da
Run Code Online (Sandbox Code Playgroud)
我喜欢这种行为,但我不需要从gh-pages分支中获取内容,因为它只包含生成的内容.如何配置Git以从除some(gh-pages)之外的所有分支获取.我也想避免gh-pages在我的本地分支列表中看到.
在某个时刻使用远程存储库时,我在运行时开始收到此消息git fetch origin
在后台自动打包存储库以获得最佳性能。
请参阅“git help gc”以了解手动内务管理。
警告:上次 gc 运行报告以下内容。请更正根本原因并删除 .git/gc.log。
在删除文件之前,不会执行自动清理。
警告:有太多无法触及的松散物体;运行“git prune”来删除它们。
这事儿常常发生。我找到了应该有帮助的地方git gc,但它只工作一次(或似乎工作) - 在此之后和之后git fetch origin我得到
在后台自动打包存储库以获得最佳性能。请参阅“git help gc”以了解手动内务管理。
后来情况又重复了。我还尝试删除 .git/gc.log - 它没有帮助。
我的 git 技能确实有限。为什么我会收到此警告以及如何长期解决该问题?
git ×10
git-fetch ×10
git-pull ×4
git-checkout ×1
git-config ×1
git-gc ×1
git-merge ×1
git-rebase ×1
git-svn ×1
merge ×1
pull ×1