我对你使用的命令有点困惑。 HEAD 通常是 git 用来跟踪当前在工作目录中的提交的标签。 git fetch 命令需要 remote 或 remote commit 配置来了解您想要获取的内容。使用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 ... 来使用origin/master 中的更改更新本地master 分支。 git pull ... 同时执行 git fetch ... 和 git merge ... 或 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 或git rebase 获取本地分支中的数据。
与往常一样,如果您遇到麻烦,请将您学到的内容发回。