Git学习笔记

这篇博客详细介绍了Git的安装、配置、仓库创建、工作区与暂存区理解、文件重命名、版本历史查看、HEAD与branch的关系、分支管理、合并与回滚、.git目录结构、git对象原理、Detached HEAD状态处理、.gitignore的使用、本地仓库备份、GitHub操作以及协同开发中的常见问题。通过实例展示了Git的各种操作和最佳实践,适合Git初学者及进阶学习者。
摘要由CSDN通过智能技术生成

目录

一.安装

1.git下载地址:https://git-scm.com/downloads

2.在命令行检查是否安装成功:git --version

二.使用git之前的配置

1.配置user.name和user.email

2.git config的参数--local、--global、--system

3.显示config的配置,--list

三.建git仓库

1.把已有的项目代码纳入git管理

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

3.在新建的仓库配置local用户信息

4.在项目目录新增一个文件newfile

四.认识工作区和暂存区

1.暂存区处于版本管理流程的哪个部分?以及暂存区的好处?

2.四次提交练习

五.如何给文件重命名

1.直接按照commit思路进行重命名,以及有什么问题?

2.不想保留刚才的操作,即回滚,如何做?

3.一条命令如何重命名

六.用git log查看版本演变历史

1.一行显示历史

2.指定只查看最近的4次commit

3.查看本地有哪些分支

4.基于旧版本号415c5c8086sg1371创建一个新的分支temp

5.基于temp分支修改readme.md 文件

6.只看当前分支的历史

7.查看所有分支的历史

8.图形化展示所有分支的历史

9.指定输出temp分支的log

七.用图形界面工具gitk查看版本历史

1.gitk --all

八..git目录

1..git目录里面有什么?

2.HEAD文件里面是什么?

3.config文件里面是什么?

4.refs文件夹里面是什么?

5.refs/heads/master(或者temp)文件的内容是什么?

6.objects文件夹里面是什么?

九.commit, tree, blob三个git对象

1.git对象彼此关系

2.用git命令查看commit、tree、blob的类型和内容(hash值如上图所示)

3.新建的git仓库,有且仅有一个commit,仅包含/doc/readme,请问内含多少个tree,多少个blob?

十.”detached HEAD”状态

1. “detached HEAD” 状态是什么?需要注意什么?

2.如何用好分离头指针?

3.分离头指针场景的演示

十一. 理解HEAD和branch

1.创建新分支时,HEAD指向哪里?

2如何利用head比较两次提交的diff

十二. 删除不需要的分支

1.如何查看当前仓库有哪些分支?

2.删除分支

十三. 修改commit的message

1.修改最新commit的message

2.修改老旧的commit的message

十四. 将多个commit整理成1个

1.将连续4次的commit整理成1个?

2.将不连续的2个commit整理成1个

十五.比较不同区域的差异

1.比较暂存区和HEAD所指文件的差异?

2.比较工作区和暂存区所指文件的差异?

3.比较工作区和暂存区指定文件的差异?

十六. 让暂存区、工作区恢复

1.让暂存区恢复成和HEAD的一样

2.让工作区恢复成和暂存区一样

3.取消暂存区部分文件的更改

十七. 消除最近的几次提交commit

1.temp分支想要回到前两次的commit

十八. 查看不同commit的指定文件的差异

1.对两个commit或两个分支进行比较

2. 对两个commit或两个分支的指定文件进行比较

十九.删除文件

二十.开发中途,遇到紧急任务,需要保留当前工作状态,怎么做?

1.保存当前工作状态,包括工作区、暂存区等

2.在当前工作区处理紧急任务

3.恢复原来的状态

二十一.指定不需要git进行管理的文件

1.在仓库中新建文件“.gitignore”,只能叫这个文件名

2.在.gitignore文件中添加不需要git管理的文本或文件夹的通配符

二十二.将git仓库备份到本地

1.备份的传输协议

2.本地备份

3.将/c/Users/lincoco/Desktop/testgit/.git的变更同步到备份zhineng.git

二十三.关于github的使用

1.注册github账号

2.设置个人信息和帮助文档位置

3.用ssh连接github,设置公私钥

4.在github新建一个仓库

5.将本地仓库同步到github(在本地仓库执行)

6.协同开发时,不同的人在同一分支修改不同文件

7.协同开发时,不同的人在同一分支的同一文件相同位置进行修改,冲突如何处理

8.协同开发时,不同的人同时变更了文件名和文件内容如何处理?

9.协同开发时,不同的人同时变更了文件名如何处理?

10.在github删除一个仓库

二十四.慎用的git命令和操作

1.git checkout

2.git reset

3.git push -f

4.协同工作时,禁止将公共的分支拉到本地后作rebase操作(历史不能被更改)

二十五.如何在github搜索?

1.UI界面按条件搜索

2.在搜索框按创建时间搜索

3.直接在搜索框输入关键字,是什么搜索策略?

4.如何搜readme包含的关键字的仓库?

5.在搜索框中组合搜索

6.如何找到与搜索相关的help?


一.安装

1.下载地址:https://git-scm.com/downloads

2.在命令行检查是否安装成功:git --version

二.使用git之前的配置

1.配置user.name和user.email

#为git设置用户名和email

$git config --global user.name ‘your_name’

$git config --global user.email ‘your_email@domain.com’

2.git config的参数--local、--global、--system

$git config --local:只对某个仓库有效

$git config --global:对当前用户所有仓库有效

$git config --system:对系统所有登录的用户有效

3.显示config的配置,--list

$git config --list --local

$git config --list --global

$git config --list --system

三.建git仓库

1.把已有的项目代码纳入git管理

$cd 项目所在路径

$git init

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

$cd 某个文件夹

$git init project_name  #会在当前路径下创建和项目名称同名的文件夹

$cd project_name

3.在新建的仓库配置local用户信息

按第二节命令

4.在项目目录新增一个文件newfile

$git add newfile

$git commit -m ‘add a newfile’

四.认识工作区和暂存区

1.暂存区处于版本管理流程的哪个部分?以及暂存区的好处?

工作目录的变更需要先添加到暂存区,再提交。尝试两套方案时,先把已完成的第一套方案放入暂存区,在试第二套方案,如果第二套方案不行,那么暂存区的第一套方案可以覆盖第二套方案;暂存区的内容已经被git管理了;暂存区的内容如果不合适可以回退。

2.四次提交练习

  • # 加入index.html和image/*

$git status

$git add index.html images

$git commit -m ‘add index + log’

  • # 加入style/style.css

$git add style

$git commit -m ‘Add style.css’

$git log

  • # 加入js文件

$git add js

$git commit -m ‘Add js’

  • #同时修改index.html和css文件

$git add -u #将被git管理的所有变更过的文件一起提交到暂存区

$git status

$git commit -m ‘Add message’

五.如何给文件重命名

1.直接按照commit思路进行重命名,以及有什么问题?

$mv readme readme.md  #删除了readme,并且新增了readme.md

$git add readme.md    #将readme.md加入git管理

$git rm readme   #将readme从git管理删除

$git status  #显示:readme—>readme.md

2.不想保留刚才的操作,即回滚,如何做?

$git reset --hard    #该命令较危险,工作区和暂存区所有的变更都会被清理掉

$git status  #此时工作路径下都是clean的

$git log   #且没有破坏git的历史

3.一条命令如何重命名

$git mv readme readme.md     #显示:readme—>readme.md

$git commit -m ‘Move readme to readme.md’  #直接commit,不需要add

六.用git log查看版本演变历史

1.一行显示历史

$git log --oneline

2.指定只查看最近的4次commit

$git log -n4 --oneline

3.查看本地有哪些分支

$git branch -v

4.基于旧版本号415c5c8086sg1371创建一个新的分支temp

$git checkout -b temp 415c5c8086sg1371

5.基于temp分支修改readme.md 文件

$git commit -am ‘Add test’      #-am 表示直接将工作区的内容提交到历史版本库中,不需要add

6.只看当前分支的历史

$git log

7.查看所有分支的历史

$git log --all

8.图形化展示所有分支的历史

$git log --all --graph

9.指定输出temp分支的log

$git log --oneline temp

七.用图形界面工具gitk查看版本历史

1.gitk --all

八..git目录

1..git目录里面有什么?

$cd .git

$ls -al

2.HEAD文件里面是什么?

$cat HEAD

  • 里面是一个引用,指向refs/heads/master,说明当前仓库正在工作的分支是master
  • 切换分支(git checkout temp)后,HEAD文件内的内容就会发生变化,指向temp

3.config文件里面是什么?

存储的local的config信息,如果直接在config文件内改变email或user的话,依然生效

4.refs文件夹里面是什么?

包括tags(标签)和heads(分支)

5.refs/heads/master(或者temp)文件的内容是什么?

$git cat-file -t 6a9802fdbdcd   #查看6a9802fdbdcd是什么类型,结果显示是commit类型,表示master指针指向的commit

$git cat-file -p 6a9802fdbdcd   #查看6a9802fdbdcd指向的内容

6.objects文件夹里面是什么?

进入objects中的98文件夹

blob指文件对象

九.commit, tree, blob三个git对象

1.git对象彼此关系

一个commit对应一棵tree,这个tree代表取出某个commit,这个commit对应一个视图,这个视图里面存放的一个快照,这个快照的集合里面存放了当前commit对应的本项目仓库的所有的文件夹以及文件的一个快照。一个文件夹也是一个tree,一个文件是一个blob,在git中,如果两个文件的内容完全一样,那么这两个文件指向同一个blob。

2.用git命令查看commit、tree、blob的类型和内容(hash值如上图所示)

$git cat-file -p 415c5c #显示上图蓝色区域部分

$git cat-file -p 912fa6 #显示上图黄色第一块区域

$git cat-file -p 6ad4c6 #显示上图绿色第一块区域,blob,文件内容,是一个html

3.新建的git仓库,有且仅有一个commit,仅包含/doc/readme,请问内含多少个tree,多少个blob?

$git init count_git_objects

$cd count_git_objects

$mkdir doc

$cd doc

$echo “hello, world”>readme

$cd ..

$find .git/objects -type f      #空的

$git add doc

$ find .git/objects -type f     #有一个对象,表示新的东西加入到暂存区

$git cat-file -t 2dadwd23     #是个blob

$ git cat-file -p 2dadwd23    # hello, world

$git commit -m ‘Add readme’

$ find .git/objects -type f   #类型是文件的一共有4个,然后用cat-file查看类型和内容,一个commit,一个是blob,两个tree。

 

十.”detached HEAD”状态

1. “detached HEAD” 状态是什么?需要注意什么?

表示正工作在一个没有分支的状态下,比如不小心checkout到一个历史commit上,此时可以基于当前的commit继续变更或者commit,但是如果此时需要切到另一个分支master上修复一个bug,那么此时切分支时,刚刚工作的没有分支的状态上的commit就可能被git当作垃圾清理掉。这是分离头指针的危险的地方。

2.如何用好分离头指针?

有时想做一些尝试性的变更。可以用分离头指针,最后若想保留更改,那么可以根据warning 提示

3.分离头指针场景的演示

$git log                #找到一个历史commit sddqde121

$git checkout sddqde121    #进入分离头指针状态,detached HEAD

  • #修改一个文件

$git commit -am ‘Background to green’

$git log  #发现这次commit只跟(HEAD)绑定在一起,而不是某个分支

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值