我对您使用的命令有点困惑。 HEAD
通常是 git 用来跟踪当前在工作目录中的提交的标签。该git fetch
命令需要远程或远程提交配置来了解您想要获取的内容。使用git fetch HEAD
将指示HEAD
您的存储库中的远程。该命令没有错误地工作很奇怪。
例如: git fetch HEAD
在我当前正在工作的存储库中导致以下错误
fatal: 'HEAD' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
该命令git remote
将列出所有遥控器,同时git remote --verbose
将包括遥控器的地址。您可以使用它来查看您是否定义了远程HEAD
以及您的朋友存储库的远程地址是什么?
但是,我的问题放在一边,以帮助消除您的困惑。该git fetch ...
命令只更新远程引用——而不是你的本地引用。
为了清楚起见,请查看存储库中的 .git 文件夹(默认情况下它是隐藏的,因此您可能需要取消隐藏它)。您会发现类似于以下的文件夹结构
working directory
|=>.git
| |=>objects <= contains data for each commit
| |=>refs
| |=>heads
| |-master <= file containing current commit of local master branch
| |=>remotes
| |=>origin
| |-master <= file containing current commit of remote origin's master branch
|-FETCH_HEAD <= file updated by `git fetch`, contains info of what was fetched
假设您签出 master 分支,git checkout master
--git 将更改您的工作目录以匹配 'objects' 文件夹中的提交数据,该数据与 '.git/refs/heads/master' 文件中的提交值匹配。
如果您这样git fetch origin master
做,“.git/refs/remotes/origin/master”文件将更新为远程源上主分支的提交——并且该提交所需的所有提交数据都被下载并放置在“对象”中文件夹。
这里重要的一点是git fetch
不会更新您的工作目录反映已签出的本地分支,并且git fetch
永远不会更新本地分支。
需要使用git merge ...
或git rebase ...
来master
使用origin/master
. 根据选项和配置(是默认设置) ,git pull ...
同时执行git fetch ...
and either git merge ...
or 。git rebase ...
git merge ...
在所有这些解释之后,您希望能够查看从您的朋友存储库中获取的内容(如果有的话)。该git branch -avv
命令将列出所有本地和远程分支,以及提交号,对于本地分支,它正在跟踪哪个远程分支。
要查看分支如何相互关联,我发现使用工具绘制存储库树图很有帮助。有几个可供选择,但我发现git log
命令足够了;比如git log --all --graph --oneline --decorate
。公平的警告,对于大型存储库来说,这可能会很长并且令人费解。--simplify-by-decoration
通过添加参数可以获得更短的输出。
总结一下:是否可以在家修复它取决于存储库中的信息。上述命令;git remote --verbose
,git branch -avv
并且git log ...
应该让您了解存储库的当前状态。从那里您可以确定是否需要做更多的事情来使用git merge
or获取本地分支中的数据git rebase
。
与往常一样,如果您遇到麻烦,请回复您所学到的内容。