Git总结

1.安装Git

git-scm.com/book/zh/v2 安装地址

通过 git --version 来查看版本(是否安装成功)

/*
 *命令行的简单命令
 */
pwd // 当前工作的路径(linux上的命令dir是window)
tree // 查看树状结构图
rd //删除文件夹
type nul>文件名称  //创建文件
echo 内容 > 写入文件路径
del //删除文件

2.使用Git之前需要做的最小配置

配置 user 信息
配置 user.name 和 user.email
git config --global user.name '用户名'
git config --global user.name '邮箱'

/*
 *config 的三个作用域
 * ----------省略等同于local-----------
 * $ git config --local  // local 只对某个仓库有效
 * $ git config --global // global 对当前用户所有仓库有效
 * $ git config --system // system 对系统所有登录的用户有效
 *.......................
 *--------显示 config 的配置,加上--list --------
 * $ git config --list --local
 * $ git config --list --global
 * $ git config --list --system
 */

3.建Git仓库

两种场景:
1.把已有的项目代码纳入Git管理

cd 项目代码所在的文件夹
git init

2.新建的项目直接用Git管理

cd 某个文件夹
git init your_project //会在当前目录下创建和项目名称同名的文件夹作为仓库

cd your_project
通过实践得出local的优先级要比global高(限于他俩之间)

4.工作区和暂存区

$ git add //后面可以跟多个文件
$ git commit -m '版本描述'  //添加到版本库
$ git add -u //把git已经管理的文件一起提交到暂存区
$ git status // 查看git当前状态
$ git log  // 查看git的日志

建议把写好的文件(git add)放到暂存区,把为一个目的的所有文件生成一个commit提交到版本库

5.给文件重命名的简便方法

$ mv readme readme.md  //检查状态会给你提示
$ git add readme.md
$ git rm readme  // git很智能会认为我们在重命名

///////////简便写法/////////
$ git mv readme readme.md  //git提供的重命名
-------
$ git reset --hard //此项命令比较危险会清空暂存区所有的操作(进行复原)

6.通过git log查看版本演变历史

$ git log --oneline //简洁的查看commit的列表
$ git log -n4   // -n[val]代表查看最近的几次历史可以和--oneline 配合使用
$ git branch -v //查看本地有多少的分支
$ git log --all //查看所有分支的版本(默认是查看当前分支的)
$ git log --all --graph // 图形化的查看

7.通过图形界面工具来查看版本历史

$ gitk //查看版本历史图形化

8.探秘.git目录

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----        2020/1/31     23:49                hooks
d-----        2020/1/31     23:49                info
d-----         2020/2/1     15:36                logs
d-----         2020/2/1     16:12                objects
d-----        2020/1/31     23:49                refs
-a----         2020/2/1     16:12             22 COMMIT_EDITMSG
-a----        2020/1/31     23:49            130 config
-a----        2020/1/31     23:49             73 description
-a----         2020/2/1     20:13            216 gitk.cache
-a----        2020/1/31     23:49             23 HEAD
-a----         2020/2/2      0:51            466 index

HEAD //文件告诉我们现在工作在哪个分支上(这是个引用指向refs)
config //里面放的是配置信息(用户名和邮箱)
refs // 它里面包含heads  tags
----------
refs => heads 里面放的是你创建的分支(多人协作开发会创建很多分支)
refs => tags //里面放的是你标记的tags,指向commit。
objects //里面有很多松散的文件,git会自我梳理,把过多的文件打包放在pack里。
// **git 中有tree的概念**
// 在git眼里只要内容相同就是唯一的一个blob
/*
 *d-----         2020/2/1     16:12                ca
 *d-----         2020/2/1     15:36                ee
 *d-----         2020/2/1     15:36                ef
 *d-----        2020/1/31     23:49                info
 *d-----        2020/1/31     23:49                pack
 * // 根据git cat-file -t ca(两位文件名和里面的编码信息可以检测出来类型)
 */
===============
$ git cat-file -t 跟编码  //检查类型
$ git cat-file -p         //根据对象的类型显示其内容

9.commit、tree、blob三个对象之间的关系

一个commit对应着一个tree。一个tree下面包含着tree和blob。

10.分离头指针情况下的注意事项

detached HEAD // 分离头指针

分离头指针是指你目前正在工作于没有分支的情况下,你可以继续做开发,但是如果偶尔有一天你切换分支工作,没有和分支挂钩的文件会被git清理掉。(好处是你想做尝试开发时可以使用,如果感觉不好直接切换分支不用理会)

  • 如果变更的很重要一定要和分支绑定在一起

进一步理解 HEAD 和 branch

// 查看两个commit的区别
$ git diff 编号  编号
$ git diff HEAD HEAD^1  // 每次加^1代表他的父级~1一样^^

11.删除不需要的的分支

使用 git branch -d (branch-name) // 如果删除不掉用户在有风险把控的情况下可以使用 -D删除。

12.怎么修改最新commit的message?

$ git commit --amend //windows打开commit进行修改 esc退出 大写 ZZ 保存


13.怎么把间隔的几个commit整理成一个

通过git rebase -i 编号最好从他父级 git rebase --root 从跟开始

  • 进入后pick为保留的,s为合并的。后面一个页面第一行描述一下

14.怎么比较暂存区和HEAD所含文件的差异

git diff --cached // 把暂存区的文件和HEAD指向的作比较

15.怎么比较工作区和暂存区所含文件的差异?

git diff //默认就是工作区和暂存区比较

git diff -- 文件名

不加文件名是吧工作区所有的文件和暂存区作比较

$ git diff [head] [head] -- 文件名
/*
 *比较两个commit的文件区别
 */

16.如何让暂存区恢复成和HEAD一样?

git reset HEAD //恢复暂存区和HEAD一样

17.如何让工作区的文件恢复成和暂存区的一样

  • 如果想变工作区的内容用checkout暂存区用reset
$ git checkout -- 文件名  //把工作区文件恢复成暂存区一样

18.怎么取消暂存区部分文件的更改

$ git reset HEAD -- 文件名  //把暂存区指定文件更改成原来

19.消除最近的几次提交

$ git reset --hard 指针 // 恢复到指针的指向

20.正确删除文件的方法

$ git rm 文件名

21.开发中临时加塞了紧急任务怎么处理?

$ git stash  // 先把当前未完成任务放到一块区域藏起来,处理紧急任务
$ git stash list  //查看区域列表
//////取出来有两种办法//////
$ git stash apply //取出暂时放的文件,不删除可复用
$ git stash pop // 取出暂时放的文件,并删除

22.如何指定不需要Git管理的文件

.gitignore 文件来配置不受git管理的文件

doc  //指定doc文件和文件夹里面的文件不受管理
doc/  //指定doc文件夹以下的文件不受管理
//如果doc和doc/同时存在,但要git管doc文件夹,不管doc文件,要怎么设置呢?
doc
!doc/*

23.如何将Git仓库备份到本地

哑协议与智能协议


直观区别: 哑协议传输进度不可见;只能协议传输可见

传输速度: 智能协议比哑协议传输速度要快。

git命令之git remote的基本用法

1.git remote 不带参数,列出已经存在的远程分支

2.git remote -v | --verbose 列出详细信息,在每一个名字后面列出其远程url,此时, -v 选项(译注:此为 –verbose 的简写,取首字母),显示对应的克隆地址。

3.git remote add url 添加一个远程仓库

修改远程仓库在本地名称 git remote rename 已有 变更

24.配置公私钥

ls -al ~/.ssh 查看是否存在现有的SSH秘钥
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 生成新SSH秘钥 。

drwxr-xr-x 1 dell 197121 0 2月 3 16:02 .
drwxr-xr-x 1 dell 197121 0 2月 3 01:24 ..
-rw-r--r-- 1 dell 197121 3381 2月 3 16:02 id_rsa (私钥)
-rw-r--r-- 1 dell 197121 742 2月 3 16:02 id_rsa.pub (公钥)
-rw-r--r-- 1 dell 197121 802 5月 1 2019 known_hosts
私钥留在本地,公钥配置到公网上

25.把本地仓库同步到GitHub

git push github --all //全都上传到远端
git fetch github 分支 //拉具体分支
git merge -h // 来处理
git merge --allow-unrelated-histories github/master //允许两个不相关的分支进行merge

26.不同人修改了不同文件如何处理

先把分支fetch 下来,然后merge 。再push。

27.不同人修改了同文件的不同区域如何处理

每次做开发时和远端同步一下是个好习惯 git pull (这个命令执行了git fetch ,git merge)
思路:1.把远端代码拉下来进行merge可以执行 git pull 。这时git会给你报冲突的问题,需要我们手动解决。可以利用图形化,和命令行多种解决方式。然后 git status 查看一下当前的状态,会告诉你确不确定merge 。如果确定git commit -am 最后push。

28.同时变更了文件名了文件内容如何处理(别人还不知道)

遇见这种情况直接git pull git会非常智能的帮我们merge。

29.把同一文件改成了不同的文件名如何处理

这种情况依旧用 git pull 看git会不会帮助我们自动merge。现实是git对于这种情况并不会。他会给我们报文件冲突,让我们自己协商解决。依次删除不需要的,添加更改的。

30.Git集成使用的禁忌

  • 禁止向集成分支执行 push -f 操作

$ git push -f的危害 会强制干掉一些commit

  • 禁止向集成分支执行变更历史的操作

公共的分支是禁止执行 git rebase -i 命令的,这样会破坏历史。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容

  • 常用Git命令总结 git config --global user.name "你的名字" 让你全部的Git仓库...
    繁星追逐阅读 254评论 0 0
  • 说明:本次总结来自廖雪峰的官方网站,仅供学习,如有侵权请联系管理员删除。 git命令 安装git 安装完成后需要配...
    test小星星阅读 408评论 0 0
  • Git 在上家公司时使用git管理代码,当时使用的稀里糊涂,有些地方不是太明白。现在这家公司把代码移到git上管理...
    圆土豆阅读 600评论 0 50
  • 关于git,之前总是遇到什么问题然后做了一个简单总结。今天决定来一个系统的总结,加深一下自己对git的理解。 1、...
    丶灰太狼他叔阅读 624评论 2 0
  • Add & Commit git init 初始化一个 Git 仓库(repository),即把当前所在目录变成...
    冬絮阅读 4,827评论 0 9