Git笔记

本文详述了Git的使用,包括Git的基本概念、工作流程、安装配置、命令操作、分支管理和解决冲突的方法。此外,还介绍了如何与GitHub进行交互,如创建远程库地址别名、推送、拉取、解决冲突以及SSH免密登录。文章强调了Git在多人协作中的重要性,如版本控制、分支管理策略,以及如何通过Pull Request进行代码审查。
摘要由CSDN通过智能技术生成

1、git

1.1 什么是git

Git是目前世界上最先进的分布式版本控制系统(没有之一).简单来说,它是控制项目版本的一个工具

  • 服务器保存文件的所有更新版本
  • 客户端是服务器的完整备份,并不是只保留文件的最新版本

优点 =>

  • 联网运行,支持多人协作开发
  • 客户端断网后,支持离线本地提交版本更新
  • 服务器故障或损坏后,可以用任何一个客户端的备份进行恢复

托管中心维护远程库

  • 内网:可以自己搭建一个GitLab服务器
  • 外网:可以使用码云、Github
1.2. 基本工作流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uaulNIaA-1631242704266)(F:\web前端\笔记\img\git资料\git流程.png)]

工作区(Workspace):平时存放项目代码的地方
暂存区(Index/Stage):用于临时存放改动信息
本地仓库(Repository):存放所有提交的版本数据
远程仓库(Remote):托管代码的服务器,如gitee,github

git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

1.3 安装并配置git
1.3.1 下载git

https://git-scm.com/,下载git对应操作系统的版本。

官网下载太慢,我们可以使用淘宝镜像下载:http://npm.taobao.org/mirrors/git-for-windows/

vscode安装gitlens插件和git history插件

安装好gitlens后设置好git路径,文件–首选项–设置,点右上角有个小箭头进入设置编辑模式,在里面添加路径,路径在git的安装目录里的bin目录下的git.exe文件,这里切记电脑路径中反斜杠\ 要变成正双斜杠。

"git.path": "D://Program Files//Git//bin//git.exe"
1.3.2常用的Linux命令

平时一定要多使用这些基础的命令!

1)、cd : 改变目录。

2)、cd . . 回退到上一个目录,直接cd进入默认目录

3)、pwd : 显示当前所在的目录路径。

4)、ls(ll): 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更为详细。

​ ls -lA列出隐藏文件

​ ll .git/: 展示.git目录的子目录和文件

5)、touch : 新建一个文件 如 touch index.js 就会在当前目录下新建一个index.js文件。

6)、rm: 删除一个文件, rm index.js 就会把index.js文件删除。

7)、mkdir: 新建一个目录,就是新建一个文件夹。

8)、rm -r : 删除一个文件夹, rm -r src 删除src目录

rm -rf / 切勿在Linux中尝试!删除电脑中全部文件!

9)、mv 移动文件, mv index.html src index.html 是我们要移动的文件, src 是目标文件夹,当然, 这样写,必须保证文件和目标文件夹在同一目录下。

10)、reset 重新初始化终端/清屏。

11)、clear 清屏。

12)、history 查看命令历史。

13)、help 帮助。

14)、exit 退出。

15)、#表示注释

vim相关操作

vim good.txt

​	:set num //显示行号

​	i   // 插入编辑

​	esc  // 键盘左上角按钮esc, 退出编辑模式

​	:wq  // 保存退出
1.3.3 配置用户信息

第一件事情,设置自己地用户名和邮箱

  • 项目(仓库)级别仅在当前本地库有效

    git config user.name tom  #设置用户名tom
    git config user.email liu@qq.com #设置用户邮箱
    

    信息保存位置:~/.gitconfig 文件

  • 系统用户级别仅在当前登录的操作系统用户有效

    git config --global user.name tom
    git config --global user.email liu@qq.com
    

    信息保存位置:C:\Users\xxxx\.gitconfig

如果使用了 --global 选项,那么该命令只需要执行一次,即可永久生效

1.3.4 git的全局配置文件

通过 git config --global user.name “” 和 git config --global user.email “” 配置的用户名和邮箱地址,会被写入到 C:\Users\dell.gitconfig 文件中

# 查看所有的全局配置项
git config --list --global
git config -l --global
# 查看指定的全局配置项
git config user.name
git config user.email
1.3.5 获取帮助信息
# 要打开 git config 命令的帮助手册
git help config

# 在终端里面打开
git config -h
1.4 git基本操作
   Ctrl+ins  复制   (ins 键盘右上角的Insert)
   Shift+ins 粘贴   (shift 键盘上最左下角CTRL键的上面一个上档转换键,也可用于中英文转换)

图片

1.4.1本地仓库搭建

创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。

1、创建全新的仓库,需要用GIT管理的项目的根目录执行:

# 在当前目录新建一个Git代码库$ git init

2、执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。

1.4.2克隆远程仓库

1、另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地!

# 克隆一个项目和它的整个代码历史(版本信息)$ git clone [url]  # https://gitee.com/kuangstudy/openclass.git

2、去 gitee 或者 github 上克隆一个测试!

1.4.3 git状态查看

文件的四种状态

版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。

  • Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
  • Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
  • Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
  • Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified

查看文件状态

上面说文件有4种状态,通过如下命令可以查看到文件的状态:

#查看指定文件状态git status [filename]
#查看所有文件状态git status
# git add .     添加所有文件到暂存区# 
git commit -m "消息内容"    提交暂存区中的内容到本地仓库 -m 提交信息

忽略文件

有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等

在主目录下建立".gitignore"文件,此文件有如下规则:

  1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
  2. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
  3. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
  4. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
  5. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释
*.txt        #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!
!lib.txt     #但lib.txt除外
/temp        #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/       #忽略build/目录下的所有文件
doc/*.txt    #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
1.4.4 添加
git add fileName  #指定文件
git add . #所有
说明:将工作区的文件添加到暂存区
1.4.5 提交
git commit -m 'commit message' fileName
说明:将暂存区内容提交到本地库
1.4.6 查看历史记录
git log 
git reflog  #常用
git log --greph #图形显示,更直观
git log --pretty=oneline #漂亮一行显示
git log --oneline #简洁显示
说明:HEAD@{移动到当前版本需要多少步}
1.4.7 前进后退
  • 基于索引值推荐

    git reset --hard 指针位置
    例子:git reset --hard a6ace91 #回到这个状态
    
  • 使用 ^ 符号只能后退

    git reset --hard HEAD^
    例子:git reset --hard HEAD^^
    注意:几个 ^ 表示后退几步
    
  • 使用 ~ 符号只能后退

    git reset --hard HEAD~n
    例子:git reset --hard HEAD~3
    
  • reset三个参数比较

soft: 
  - 仅本地库移动HEAD 指针
mixed:
  - 在本地库移动HEAD指针
  - 重置暂存区
hard:
  - 在本地库移动HEAD指针
  - 重置暂存区
  - 重置工作区
1.4.8 删除文件找回
  • 相当于建立一个快照,虽然删除了,但只要添加到暂存区,就能找回
git reset --hard 指针位置
1.4.9 文件差异比较
git diff 文件名   #将工作区的文件和暂存区比较
git diff 哈希值 文件名  #和本地库历史中的一个版本比较
git diff  #不带文件名,则比较多个文件
1.4.10 git tag 用法

(1) 显示所有标签

git tag或者git tag -l

(2) 新建标签

git tag -a v1.01 -m “Relase version 1.01”

注解:git tag 是打标签的命令,-a 是添加标签,其后要跟新标签号,-m 及后面的字符串是对该标签的注释。

vim apple.txt

git add .
git commit -m "知识点1"

git tag 01_知识点1

(3) 删除标签
git tag -d v1.01
注解:-d 表示删除,后面跟要删除的tag名字

(4) 提交所有标签到远程仓库
git push origin --tags

(5) 删除远程标签
git push origin :refs/tags/2.0
注解:就像git push origin :branch_1 可以删除远程仓库的分支branch_1一样, 冒号前为空表示删除远程仓库的tag。

git push origin :refs/tags/2.0

1.4.11 小结

初始化git仓库的命令
git init
查看文件状态的命令
git status 或者 git status -s
一次性将所有新增和修改的文件加入暂存区的命令
git add .
将暂存区的文件提交到 git 仓库的命令
git commit -m “提交信息”
跳过暂存区 ,直接提交
git commit -a -m “提交信息”

1.5 git分支

git分支中常用指令:

# 列出所有本地分支
git branch

# 列出所有远程分支
git branch -r

# 新建一个分支,但依然停留在当前分支
git branch [branch-name]

# 新建一个分支,并切换到该分支
git checkout -b [branch]

# 合并指定分支到当前分支
$ git merge [branch]

# 删除分支
$ git branch -d [branch-name]

# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
1.5.1 什么是分支管理
  • 在版本控制中,使用推进多个任务
1.5.2 分支的好处
  • 同时并行推进多个功能开发,提高开发效率
  • 某一分支开发失败,不会对其它分支有任何影响
1.5.3 分支操作
  • 创建分支
git branch 分支名
  • 查看分支
git branch
git branch -v 
  • 切换分支

    Git社区发布了Git的新版本2.23。在该版本中,有一个特性非常引人瞩目,就是新版本的Git引入了两个新命令 git switch 和 git restore,用以替代现在的 git checkout。换言之,git checkout 将逐渐退出历史舞台。

git checkout 分支名
git checkout -b 分支名   #创建分支并直接切换到该分支
git switch 分支名
git switch -b 分支名
  • 合并分支相当于把修改了的文件拉过来
git merge xxx
注意:合并分支的时候要明确谁谁合并
	我在a分支里面修改了。要合并到master,就先切换到master,然后合并b
  • 删除分支
git branch -d 分支名
1.5.4 解决冲突
  • 冲突的表现
  • 冲突的解决
    • 第一步:编辑,删除特殊标记<<< ===
    • 第二步:修改到满意位置,保存退出
    • 第三步:添加到缓存区 git add 文件名
    • 第四步:提交到本地库git commit -m '日志信息' ``注意:后面一定不能带文件名

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vYieOYN9-1631242704277)(C:\Users\25468\AppData\Roaming\Typora\typora-user-images\image-20210719225642559.png)]

2. Git 结合Github

别分手` `别名 分支名
2.1 创建远程库地址别名
git remote -v  #查看远程地址别名
git remote add 别名 远程地址 
例子:git remote add origin https://xx
2.2 推送
开发修改完把本地库的文件推送到远程仓库` `前提是提交到了本地库才可以推送
git push 别名 分支名
git push -u 别名 分支名    #-u指定默认主机
例子:git push origin master
2.3 克隆
完整的把远程库克隆到本地` `克隆下来后不要在主分支里面做开发` `clone进行一次,从无到有的过程,更新用pull
git clone  远程地址
例子:git clone https://xx
2.4 拉取
本地存在clone下来的文件 就用pull更新
pull = fetch + merge
	git fetch 别名 分支名
	git merge 别名 分支名
git pull 别名 分支名
2.5 解决冲突
注意:解决冲突后的提交是不能带文件名的
如果不是基于远程库最新版做的修改不能推送,必须先pull下来安装冲突办法解决
2.6 rebase
提交记录简洁不分叉` `没学懂,感觉有点鸡肋` `混眼熟
git rebase -i 索引号
git rebase -i HEAD~3  #合并最近三条记录
说明:在vim编辑里面改成s
2.7 beyond compare
用软件解决冲突1.安装 :   beyond compare 2.配置:   git config --local merge.tool bc3  #合并名称   git config --local mergetool.path '/usr/local/bin/bcomp' #软件路径   git config --local mergetool.keepBackup false  #False不用保存备份3.应用:   git mergetool说明:--local指只在当前操作系统有效
2.8 跨团队合作
代码review之后合并
  • 适用于个人

    邀请成员:Settings --> Collaborators -->填写用户名 -->打开链接接受邀请

  • 企业 创建一个组织 方便管理

  • review

    组织做review 通过Pull request

  • 给开源社区共享代码

    点击别人仓库的fork 到自己的仓库 – > 然后clone下来 修改后推送到远程库 --> 点击Pull Request请求 --> Create pull request发消息

2.9 Tag标签
为了清晰的版本管理,公司一般不会直接使用commit提交
git tag -a v1.0 -m '版本介绍'   #创建本地tag信息
git tag -d v1.0    		#删除tag
git push origin --tags   #将本地tag信息推送到远程库
git pull origin --tags    #拉取到本地

git checkout v.10    #切换tag
git clone -b v0.1 地址   #指定tag下载代码
2.10 SSH 免密登录
  • 输入:ssh-keygen -t rsa -C GitHub邮箱地址
  • 进入.ssh目录,复制id_rsa.pub文件内容
  • 登录GitHub。Settings --> SSH and GPG keys–> New SSH Key
  • 回到git通过ssh地址创建。git remote add 别名 SSH地址

3. Git工作流

3.1 概念
在项目开发过程中使用Git的方式
3.2 分类
3.2.1 集中式工作流
像SVN一样,集中式工作流有一个中央仓库,所有的修改都提交到了Master分支上
3.2.2 GitFlow工作流 *

主干分支master 开发分支develop 修复分支hotfix 预发布分支release 功能分支feature

GitFlow 有独立的分支,让发布迭代过程更流畅。
3.2.3 Forking 工作流
在 GitFlow 基础上, 充分利用了 Git 的 Fork 和 pull request 的功能以达到代码审核的目的。 
安全可靠地管理大团队的开发者

3.git结合vscode

注意:解决冲突后的提交是不能带文件名的
如果不是基于远程库最新版做的修改不能推送,必须先pull下来安装冲突办法解决

拉取下来后如果进入冲突状态,则按照解决冲突后再提交

问题1:使用vscode 用git 拉取代码,提示:在签出前,请清理存储库工作树

解决方法:

\1. 手动解决:

①git stash 先将本地修改存储起来
②git pull 拉取远程
③git stash pop 还原暂存内容

\2. 放弃本地修改,直接覆盖

①git reset --hard
②git pull

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值