git笔记

Git

一、简介

1. 是什么

最先进的版本控制系统

Bitkeeper 是最初的版本控制器, 是商业用途, 后来在开放linux时被破解

  • git以行为单位, 进行检测, 控制

  • svn(也是一个版本控制系统) 为集中式

    • 依赖中央仓库, 一旦中央仓库出现问题, 风险太大
  • git为分布式

    • 每个人都是一个节点
    • 也拥有中央仓库, 方便合并
2. 作用
  • 版本还原
  • 分支管理 (很快, 只需移动指针)
  • 协同开发 (自动合并, 手动解决冲突)
  • 版本记录
  • 历史追踪
  • 权限管理
3.1 配置设置
1. 设置用户名和邮箱
     a、git config --global user.name lianzp           #设置用户名
     b、git config --global user.email liazp@atguigu.com  #在开发过程中,写实际的邮箱地址

2. 查询配置及查询配置所在的路径
      a、git config --list                   #查询配置信息
      b、 git config --list --show-origin    #查询配置文件所在的位置

3. 初始化本地库
      a、git init 

4. 取消换行符转换的warning提醒    #Windows下的换行符为\nf,而在linux下是\n
      a、git config core.autocrlf false
      
命令含义
git config --list查看所有配置
git config --list --show-origin查看所有配置以及所在文件位置
git config --global user.name xxx设置git用户名
git config --global user.email xxx设置git邮箱
git init初始化本地库
git config core.autocrlf false取消换行符转换的warning提醒
3.2 配置级别
有三个级别:
1. 系统默认,位于git安装路径下;
2. 用户配置:在c盘下;
3. 项目配置:在当前项目仓库的配置文件中。

20211223142002

image-20200622200432163

3.3 Git三个概念
三个概念:
1.工作区(Working Directory):就是你电脑本地硬盘目录
2.本地库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
3.暂存区(stage):一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index

image-20200622201647983

image-20200622201723045

二、git的基本操作

1. 把一个目录初始化成一个本地仓库
1. 新建一个本地仓库, 也就是一个文件夹
2. 执行 git init命令
3. 本地仓库会多一个.git的隐藏文件夹
4. 所有命令要在初始化过的文件夹目录下操作
2. 常用命令
命令	作用
git status									查看本地库的状态(git status -s 简化输出结果)

git add [file]							多功能命令: 1. 开始跟踪新文件 
												  2. 把已跟踪的文件添加到暂存区 
												  3. 合并时把有冲突的文件标记为已解决状态
												  
git commit –m “xxx” [file]	将暂存区的文件提交到本地库,-m 后面为修改的说明
3. 三个区域转换
  • 工作区(Working Directory):就是你电脑本地硬盘目录
  • 本地库(Repository):工作区有个隐藏目录.git,它就是Git的本地版本库
  • 暂存区(stage):一般存放在"git目录"下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。

image-20200622184352025

4. 忽略文件
  • 一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。
  • 通常都是些自动生成的文 件,比如日志文件,或者编译过程中创建的临时文件等。
  • 在这种情况下,我们可以创建一个名为 .gitignore 的文件,列出要忽略的文件的模式。
--1. 使用场景
    a、当有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表种时。 
--2. 实现方式:
    a、创建".gitignore" 的文件,列出要忽略的文件的模式 --文件的名字不能错
    b、模式匹配规则
        # 忽略所有的.a 文件 
        *.a

        # 但跟踪所有的 lib.a,即便你在前面忽略了 .a 文件 
        !lib.a

        # 只忽略当前目录下的 TODO 文件,而不忽略 subdir/TODO. 不递归的忽略
        /TODO

        # 忽略任何目录下名为 build 的文件夹 递归的忽略
        build/

        # 忽略 doc/notes.txt,但不忽略 doc/server/arch.txt 
        doc/*.txt

        # 忽略 doc/ 目录及其所有子目录下的 .pdf 文件 
        doc/**/*.pdf
5. 版本的切换
  • git reset --hard HEAD^
  • git reset --hard HEAD~n
  • git reset --hard [具体版本号,例如:1f9a527等]
相关命令:

命令																	作用
git log															以完整格式查看本地库状态(查看提交历史)
git log --pretty=oneline						以单行模式查看本地库状态
git reset --hard HEAD^							回退一个版本
git reset --hard HEAD~n							回退N个版本
git reflog													查看所有操作的历史记录
git reset --hard [具体版本号]				回到(回退和前进都行)指定版本号的版本,
git checkout -- [file]						 从本地库检出最新文件覆盖工作区的文件(文件还没有提交到暂存区, 否则无效)
git reset [file]  或者 git restore –staged [file]	从暂存区撤销文件
git restore <file>									放弃在工作区的修改(还没有提交到暂存区)
git rm --cache [file]								撤销对文件的跟踪.

注意:

  1. 在 Git 中任何已提交的东西几乎总是可以恢复的

  2. 任何你未提交的东西丢失后很可能再也找不到了

6. 删除操作
  • 文件夹内删除
  • git add .
  • git commit -m “delete”
7. 比较文件

减号和加号分别代表两个对比的文件!

  • $ git diff
    • 将工作区中的文件和暂存区进行比较
  • $ git diff HEAD
    • 将工作区中的文件和本地库当前版本进行比较
  • git diff --cached
    • 查看暂存区和本地库最新提交版本的差别
8. git目录

image-20200622194001339

9. 分支操作
命令	描述
git branch [分支名]							创建分支
git branch -v										查看分支,可以使用-v参数查看详细信息
git checkout [分支名]						切换分支
git merge [分支名]								合并分支;
																将merge命令中指定的分支合并到当前分支上
																例如:如果想将dev分支合并到master分支,那么必须在master分支上执行merge命令
																如果在dev分支上面,对一个文件做了修改,这个时候master分支上面对应的文件是没有修改信息的。
																因此需要将分支合并!
																
git branch –d[分支名]						删除分支
																注意:必须切换到master,才能删除,不能自杀!
																
git checkout –b [分支名]					新建并切换到当前分支
git log --oneline --decorate --graph --all	它会输出你的提交历史、各个分支的指向以及项目的分支分叉情况

概念:

  • 不使用分支,就是人与人之间协作;
  • 使用分支,就是小组与小组之间的协作;
  • 从主干中拉取分支,开发完成,将工作,合并到主干。
10. 分支冲突

问题: 当同时编辑一个文件时, 主分支和其他分支同时修改了同一行, 则合并时会引起冲突.

解决: 编辑冲突的文件,把“>>>>>>>>>”、“<<<<<<”和“========”等这样的行删除,编辑至满意的状态,提交。

提交的时候注意:git commit命令不能带文件名。

三、github (没有外网的可以用 gitee 功能差不多)

1. 本地连接Github
1. 创建一个密钥对
ssh-keygen
2. 复制公钥
catch ~/.ssh/id_rsa.pub
3. 粘贴到github中的ssh keys中
4. 测试 
ssh -T git@github.com

流程:

从本地和github通讯, 有两种方式:

1. 使用https
2. 使用ssh

推送:

1. 先建一个远程仓库
2. 给远程仓库起个别名
3. 推送

新员工入职:

1. 拿到所有代码

协作冲突:

当两个人修改了共一个行会发生冲突.

谁先push, 谁成功!

解决:

1. 后push要拉倒最新的版本()
2. 然后解决冲突
2. push
本地库推送到GitHub
①准备本地库
②在GitHub上创建一个仓库
③增加远程地址
git remote add  <远端代号>   <远端地址> 
 								<远端代号> 是指远程链接的代号,一般直接用origin作代号,也可以自定义;
								<远端地址> 默认远程链接的url;
								
④本地库推送到远程库
git  push  -u  <远端代号>    <本地分支名称>
 							 <远端代号> 是指远程链接的代号;
 							 <分支名称>  是指要提交的分支名字,比如master;
 							 
我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

⑤查看远程分支
		git remote –v
3. pull
本地库抓取远程库
如果远程库的版本新于当前库,那么此时为了使当前库和远程库保持一致,可以执行pull命令
git pull <远端代号>  <远端分支名>;

例 git pull origin  master
4. clone
实际的情况可能是刚开始做项目的时候,需要从远程库将项目先整到本机。
执行命令:git  clone   <远端地址>   <新项目目录名>
 										 <远端地址> 是指远程链接的地址;
										 <项目目录名>  是指为克隆的项目在本地新建的目录名称,可以不填,默认是GitHub的项目名;
命令执行完后,会自动为这个远端地址建一个名为origin的代号。

例 git  clone  https://github.com/user111/Helloworld.git   hello_world
5. 解决冲突

尽量避免冲突:

  1. 尽量不要修改同一文件
  2. 如果多个人修改同一文件, 最好的办法, 找一个专人负责修改公共文件.
  3. 每次写代码之前, 先更新到最新 版本. 上班第一件事, 先pull
  4. 上传值代码之前, 也要先pull. 先把产生的冲突先解决, 再上传.
6. 邀请成员

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HW09xjQm-1640240792098)(https://gitee.com/image111/image1/raw/master/img/20211223142712.png)]

7. 总结

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rbDJT1FY-1640240792098)(Git.assets/image-20200622202236769.png)]

四、github与idea

1. 上传到github
  1. 在idea中找到setting , 搜索git, 找到路径, 并关联github账号

  2. vcs —> import into version control —> share project on github

  3. 勾掉.idea

  4. vcs —> git —> add —> push

2. clone 到idea
  1. checkout from vresion control
  2. 输入clone地址
  3. 点更新/pull

注:gitee的idea配置与github差不多

五、gitee

5.1本地库联通gitee

①查看本地是否配置了密钥

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kEWa0hGW-1640240792099)(../../../笔记/gitee笔记/assets/1639478607774.png)]

只需要在第一次配置就可以了,如果存在就不需要额外生成密钥

②生成密钥

命令:

ssh-keygen

生成密钥:

Snipaste_2021-12-14_18-49-05

生成的密钥分为私钥和公钥,会保存在用户家目录的.ssh文件夹中。

nipaste_2021-12-14_18-50-01

其中,id_rsa是私钥,id_rsa.pub是公钥。

将公钥告诉gitee账户,相当于约定一个接头暗号!

进入gitee的账户,

nipaste_2021-12-14_18-45-40

测试本地仓库和gitee的联通性:ssh -T git@gitee.com

nipaste_2021-12-14_18-47-09

.ssh文件夹中会多一个文件known_hosts,其中记录了连接的github的ip账号。

5.2clone(下载资源)

执行命令:git clone <远端地址> <新项目目录名>

git clone git@gitee.com:on88888/git_on0726.git

Snipaste_2021-12-14_18-52-58

在本地库添加文件(文件夹)后上传远程端

1. 提交最新变化
git add new_file  
git commit -m '注释操作意义'  
2.上传到远程端
git push origin master

Snipaste_2021-12-16_14-28-37

注:origin 代指 git@gitee.com:on88888/git_on0726.git 这个地址

​ master 代指 本地(localhost)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Leo⁵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值