git init 会不会清空_Git命令:git pull & git fetch

前言

本地仓库需要获取远程仓库中的更新,需要用到Git命令pull或fetch,这两个命令在实际使用时有何区别,下面详细介绍下。

使用工具

  • Git v2.29.2.2
  • TortoiseGit v2.4.0.2

pull 和 fetch 区别

git分为本地仓库和远程仓库,本地的git文件夹中存储了本地仓库分支的commit ID和跟踪的远程仓库分支的commit ID

  • .git/refs/head/[本地分支]
  • .git/refs/remotes/[跟踪的分支]

两个命令的区别如下:

  • git fetch 只更新跟踪的远程仓库分支commit ID,本地仓库分支的commit ID保持不变,需要合并(merge)跟踪的远程仓库中的更新到本地仓库;
  • git pull 更新所有仓库的commit ID;

git pull = git fetch + git merge ?下面实际测试验证这个等式是否成立。

测试用例

两个本地仓库GitTest-1和GitTest-2,两个本地仓库对同一文件进行修改,GitTest-1提交修改并推送到远程仓库中,GitTest-2需要获取远程仓库中的更新,并且解决文件更新冲突

pull测试

  1. GitTest-1更改文件change2.txt提交并推送,GitTest-2更改文件change2.txt

a31f72e75fedae40ce7a352328d49d21.png

2. GitTest-2拉取(git pull)远程更新,得到以下错误

4e45d7af5b515696ee38fba21036f6c3.png

3. GitTest-2根据提示储藏本地修改(stash save),本地的全部改动保存到临时仓库,并撤销了本地的所有改动
4. GitTest-2再次拉取远程更新,因为本地修改已保存,不会报错,这个时候GitTest-2的本地仓库与远程仓库的代码保持一致,而临时仓库中的改动还需要更新,因此操作还要继续

4a2fd1a47282c148a092237e14744770.png

5. GitTest-2合并临时仓库中的本地修改(stash pop/apply)到本地仓库,检查临时仓库和本地仓库是否有冲突,提示冲突然后手动解决,两个合并命令的区别如下:

    • stash pop 会清空stash list
    • stash apply 不会清空stask list

7148137ebb7efc182ce879c28e81c32c.png

6. GitTest-2提交并推送本地修改,至此两个本地仓库代码与远程仓库保持一致

4959d499220c9375800db2c0a01a6b4e.png

fetch测试

  1. 与之前一致,首先GitTest-1更改文件change2.txt提交并推送,GitTest-2更改文件change2.txt

a07ea93eabbe8e1481514e72c737a5cc.png

2. GitTest-2 fetch远程更新,更新了跟踪的远程仓库(origin/master),本地仓库(master)未更新

aee1be5323806b9091436d03501867ca.png

795080bda3862c7083707878668c11de.png

3. GitTest-2合并本地仓库的修改到跟踪的远程仓库(git merge FETCH_HEAD)

4bef2548aaedc710a94ba94782bbf94f.png

4. GitTest-2提交并推送更新到远程仓库

测试总结

从结果上来看,git pull = git fetch + git merge是成立的,不过过程却不同,尤其是本地仓库的更新方式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值