git看一篇就够了

目录:

一 架构

二 常用命令解析

三 常见scenario

正文:

一 架构

1 各个模块介绍:

远端Repository:git address。存放远端branch.本地Repository:存放本地branch.

远端branch;origin/master;本地branch;Index/stage:暂存区或者索引区.本地space,workspace.

注意是5棵树(remote/origin/master,origin/master,master,index,workspace),不是4棵树(网上大部分介绍都是4棵树,本文是第一次正确提出5棵树). git本地是3棵树. origin是地址,不参与代码管理,仅仅管理分支.

2 主要流程

3 Origin,origin/master,master关系?

3.1 仓库和分支区别?

仓库是origin,它是git地址,是存放分支的地方,不是直接存放代码的地方.

分支是保存code的地方.找代码需要找具体仓库的具体分支.

仓库仅仅提供场地,每个branch负责保存代码出产品。

3.2 Origin是仓库,值is xxx.git,它是git 地址,不是远程分支.

origin/master是远程分支remote/origin/master的本地副本.注意origin/master是本地的,不是远端的.

Master是一个本地分支,不是本地仓库.

3.3 本地分支和远程分支关系?

是先有本地分支后有远程分支.

git fetch origin//从origin地址下载remote/origin/branch的代码到本地origin/branch。

git merge origin/branch //将origin/branch 代码合并到本地branch中.

Case1: pull=git fetch+git merge;

remote/origin/branch=origin/branch=local branch=workspace

Case2:当remote/origin/branch有他人提交,但是branch没有fetch.

那么remote/origin/branch!=origin/branch

Case3:当本地工作区workspace做了改动,然后git commit.但是branch没有push.

那么 origin/branch!=branch

Case4:git push

remote/origin/branch=origin/branch=branch

参考:在Git中,origin / master与origin master之间有什么区别?https://www.icode9.com/content-4-185866.html

Git fetch、pull以及merge之间的区别:https://blog.csdn.net/qq_34609889/article/details/88733153

4 master 分支和dev 分支的关系?

两者是并列关系.mater分支和dev分支角色和地位是一样的,只是default 创建分支是master。它们不是上下层级关系.也不是组合关系,两者没有共同上一层级,它们是一个产品线只是细节不同,不是两个产品线.

实例:git 拉取gitlab远程分支(dev)到本地(亲测有效)https://blog.csdn.net/d_claus/article/details/88551338

5 git 实现原理:每个提交是一个commit id.HEAD指向当前节点.

6 git与svn相比多了一个本地分支,多了一个层级.svn的分支相当于git的本地

workspace.git本地做了存储,所以没网络也可以上传代码.git架构从集中式变成分布式。

小结:

二 常用命令解析

1 常用命令导图.

2 Git常用命令.

 2.1 命令分类:

 1 ) 网络相关命令:只有pull,push ,fetch,负责上传下载.其他命令全是本地命令,比如:checkout,merge,add etc.
 2) Branch相关:check,merge;
 3)文件相关:add,rm,commit etc.

 2.2 下面几个引用基本把常用的git命令都将明白了,注意改变几棵树,修改了哪棵树.
(1)Git 图解命令: https://marklodato.github.io/visual-git-guide/index-zh-cn.html
(2) Git常规配置与用法https://segmentfault.com/a/1190000011168654
(3)Git 教程:https://www.liaoxuefeng.com/wiki/896043488029600
(4)git 图解本地工作区·缓存区·本地仓库·远程仓库:https://blog.csdn.net/weixin_33127753/article/details/88870257 

上面给出了常用命令,pull(fetch+merge),push; checkout; 合并(rebase,merge);回退(reset,revert); 增删补(add,rm,amend).
但是git 命令经常容易混淆,下面将相似命令解析.
2.3  pull and push

1) Git pull,fetch以及merge之间的区别 ?

git pull = git fetch + git merge FETCH_HEAD

git pull --rebase =  git fetch + git rebase FETCH_HEAD ;将会改变3棵树,本地origin/branch,branch和workspace,不改变暂存区.
fetch 就是download. fetch 将remote 分支的东东,下载到本地仓库origin/master, merge和并origin/master 到master, 然后覆盖本地工作区(有冲突解决冲突)。 

同时可以参考:https://blog.csdn.net/qq_34609889/article/details/88733153

上文中HEAD-master就是origin/master; remote-master就是master.

2)  Push

第一次push:git push -u origin master.

git push origin dev// push 到orgin/dev 分支

$git push A B:C//其中A和C是分别remote端的一个repository的名字和branch的名字

2.4  checkout
git checkout 分成两种情况:checkout 分支还是checkout 文件。
1) checkout 分支也分成两种情况 a)新建一份拷贝+切换  b)切换;
QA: checkout之后workspace会变吗?会产生 冲突吗?
不会冲突。从本地仓库checkout file直接替换本地workspace。
2) checkout 文件:将暂存区文件替换工作区文件,如果暂存区没有则用本地仓库文件替换工作区文件.

2.5 合并:git merge,git rebase,cherry-pick; 

1): 基本用法

rebase 约等于merge.执行merge,rebase的前提是工作区与仓库一致,工作区有改动需要先提交git commit.如果工作区变动merge是执行不了的.

git merge master//如果在dev分支,会dev merge master 分支.

git merge origin/master //master merge  orgin/maste

2) : 两者的区别

下面的link说明白了两者的区别.

https://blog.csdn.net/wh_19910525/article/details/7554489

划重点:对于使用 git merge 来合并所看到的commit的顺序(从新到旧)是: C7 , C6 , C4, C5 , C3 ,C2,C1

对于使用 git rebase 来合并所看到的commit的顺序(从新到旧)是: C7 , C6‘,C5' ,C4,C3, C2,C1

3):cherry-pick

不用merge分支,直接merge 不同branch的commit id.

这命令简直就是神器,给你自由,你想把不用merge分支哪个节点merge过来就把哪个节点merge过来,其合入的不是分支而是提交节点。

2.6: 回退,撤销reset,checkout,revert

git reset 和git add 相反,是回撤提交.

(1) git reset and git checkout 区别?

Git reset 用于回退,HEAD将不在当前位置而是后退到以前提交.

Git checkout 用于获取当前版本.

Git checkout 会改变workspace,不会改变index

Git reset 根据不同参数,决定改变workspace,index的情况.下文就是具体情况.

(2) Reset,reset --soft,reset --hard 区别?

git reset 修改commit id 即head

i) Git reset --soft HEAD~

Soft 命令仅仅改变repository 1个地方
ii) git reset [--mixed] HEAD~(mixed可以不写,缺省是这种情况)

Git reset 则git repository and index 2个地方同时改变

iii) Git reset --hard HEAD~

Git hard 则git repository , index,workspace 3个地方同时改变

iv) git reset eb43bf file.txt

从指定commit 拉取数据,仅仅改变暂存区.

Git 从 HEAD 拉取数据,而是通过具体指定一个提交来拉取该文件的对应版本.我们只需运行类似于 git reset eb43bf file.txt 的命令即可。以上是版本库、Index 和工作目录的状态。

现在,执行git reset eb43 file.txt

V) 合并提交: 这个方法不是常用方法,相当于一个tricky.
作用:多次提交一个文件,想合并这些改动。先将head指针回退,将暂存区中的newest的文件重新提交.

合并提交通常不会采用这种方法,通常是git amend 在缓冲区合并几个提交,然后统一提交.

Vi) reset 和 revert

这个问题用commit id 说明最好. 提交commit1,commit2,commit3. 撤销并修改commit2.
reset执行结果 : commit1, commit2+; 
revert执行结果: commit1,commit2,commit3,commit2+;
reset 因为head回退,所以push的时候会出现error,因为本地head 落后远端head. 因此需要强制push,push -f 推送回退版本.
下面的blog用文件说明.Git恢复之前版本的两种方法reset,revert(图文详解)https://blog.csdn.net/yxlshk/article/details/79944535.

参考:git reset 命令详解(二)—— Git 学习笔记 08 //这个是图解reset blog是从《精通git》第二版中"git工具--重置解密 "摘抄的

https://blog.csdn.net/longintchar/article/details/81952043

2.7 Git 常用命令速查表

3常用场景

3.1 单人场景

github上注册,配置ssh,关联远程库,创建remote分支.

本地增删改合add、commit、push,rm,merge,

远程访问clone,git pull --rebase同步

https://blog.csdn.net/weixin_43034040/article/details/94596522

这两个git 资料很完整

https://blog.csdn.net/jackyvincefu/category_9261810.html

https://blog.csdn.net/u013490896/category_7883282.html

3.2 多人协作

Git 教程(三):仓库与分支

https://www.cnblogs.com/xuecanmeng/p/7383222.html

血泪教训之请不要再轻视Git —— 我在工作中是如何使用 Git 的

https://zhuanlan.zhihu.com/p/250493093

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值