再探git基本操作(pull与fetch)的区别
今天恰逢一个实习生不清楚在使用git发生冲突时如何去处理,所以就给他说了git在工作上的一般使用以及拉取与获取的区别,然后自己也温习了一下。
平时使用git都是基于图形化界面 SourceTree 的,很方便。界面上有两个按钮:
下面来了解两个概念:
接着我们可以到自己本地的git仓库目录去看看:
随便打开一个仓库然后在命令行中执行命令ls -a
查看所有文件。
我们会发现一个叫『.git』的隐藏文件夹,cd 进入这个文件夹,执行ls命令然后会发现一个名为『FETCH_HEAD』的文件,就是上面提到的版本链接,
接着我们可以cat一下文件名查看他的内容。
记录的是一段hash,指向远程仓库一个版本。 然后同级还有一个refs文件夹,里面包含三个文件夹:heads、remotes、tags。 heads 和 remotes 分别记录的就是本地和远程不同仓库的最新 commit id
接下来我们可以直接在代码托管平台对仓库进行修改并提交: 本地测试仓库使用的master分支 1.这里我们测试选用coding平台,先看看历史记录
2.本地查看 commit-id
.git/refs/remotes/origin
目录,查看master可以看到远程仓库id值:c4b84ea
.git/refs/heads
目录,查看master可以看到本地仓库id值:c4b84ea
3.接着在coding的web端修改readme文件并提交,再次查看项目提交历史
4.本地仓库执行git fetch
并查看 commit-id
.git/refs/remotes/origin
目录,查看master可以看到新的远程仓库id值:f8dfd95
.git/refs/heads
目录,查看master可以看到旧的本地仓库id值:c4b84ea
这里我们知道:执行git fetch
时会把远程仓库的最新commit-id同步到了本地。
然后查看README文件发现并没有与web端修改的同步。
5.本地仓库执行git pull
并查看 commit-id
.git/refs/remotes/origin
目录,查看master可以看到新的远程仓库id值:f8dfd95
.git/refs/heads
目录,查看master可以看到新的本地仓库id值:f8dfd95
发现 commit-id 都更新了,然后README文件也是最新内容。
这里我们对拉取与获取的理解就更深刻一些了吧(?)。