GIt 基础

124 阅读15分钟

GIt 操作

git 环境配置

软件下载

打开 [git官网] git-scm.com/ ,下载 git 对应操作系统的版本

所有东西下载慢的话就可以去找镜像

【淘宝镜像下载】npm.taobao.org/mirrors/git…

启动 Git

Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多

Git CMD:Windows风格的命令行

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

常见的 Linux 命令

1. cd : 改变目录。

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

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

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

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. #表示注释

Git 基本理论

三个区域

Git本地有三个工作区域:工作目录(Working Directory)、暂存区(Stage/Index)、资源库(Repository或Git Directory)。如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:从下往上

image-20240618163839684.png

Workspace:工作区,就是你平时存放项目代码的地方

Index / Stage:暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

本地的三个区域确切的说应该是git仓库中HEAD指向的版本:

image-20240618142622306.png

Directory:使用Git管理的一个目录,也就是一个仓库,包含我们的工作空间和Git的管理空间。

WorkSpace:需要通过Git进行版本控制的目录和文件,这些目录和文件组成了工作空间。

.git:存放Git管理信息的目录,初始化仓库的时候自动创建。

Index/Stage:暂存区,或者叫待提交更新区,在提交进入repo之前,我们可以把所有的更新放在暂存区。

Local Repo:本地仓库,一个存放在本地的版本库;HEAD会只是当前的开发分支(branch)。

Stash:隐藏,是一个工作状态保存栈,用于保存/恢复WorkSpace中的临时状态。

Git 工作流程图

image-20240618165218513.png

  1. clone (克隆): 从远程仓库中克隆代码到本地仓库

  2. checkout(检出): 从本地仓库中检出一个仓库分支然后进行修订

  3. add(添加): 在提交前先将代码提交到暂存区

  4. commit(提交): 提交到本地仓库。本地仓库中保存刘改的各个历史版本

  5. fetch(抓取): 从远程仓库,抓取到本地仓库,不进行任何合并动作,y一般操作较少。

  6. pull(拉取): 从远程仓库拉到本地仓库,自动进行合并(merge), 然后放到工作区,相当于 fetch + merge。

  7. push(推送): 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库。

基础指令操作

    1. add 是把文件交给 git 工具管理
    1. conmit (提交) git 工具 把文件从开发区放到暂存区
    1. push (推) git 把 暂存区的文件上传到云服务器
初始化: git init
管理文件: git add 文件名.后缀名
提交: git Commit -m '文件描述说明'
git log 查看添加日志,能看到完整的版本号,长度为40的唯一标识符

Git 配置

查看配置

git config -l

查看不同级别的配置文件:

#查看系统config
git config --system --list
  
#查看当前用户(global)配置
git config --global  --list

Git相关的配置文件:

1. Git\etc\gitconfig  :Git 安装目录下的 gitconfig   --system 系统级

2. C:\Users\Administrator\ .gitconfig   只适用于当前登录用户的配置  --global 全局

这里可以直接编辑配置文件,通过命令设置后会响应到这里。

基本配置

  1. 打开 Git Bash

  1. 设置 用户信息

    用户名: git config --golbal user.name "zhangsan"
    email:  git config --golbal user.email "zhangsan@163.com"
    

  1. 查看配置信息
查看用户名: git config --golbal user.name 
查看email:  git config --golbal user.email 

为常用指令配置别名(可选)

有些常用的指令参数特别多,每次都要输入好多参数,我们可以使用别名。

  1. 打开用户目录, 创建 .bashrc 文件

    部分 Windows 系统不允许用户创建点开通的文件,可以打开 gitBash 执行 touch ~/.bashrc

  2. 在 .bachrc 文件中输入如下内容:

# 用于输出 git 提交日志
alias git-log='git log --pretty=oneline --all --graph -- abbrev-commit'

# 用于输出当前目录所有文件及基本信息
alias ll = 'la-al'

  1. 打开 GitBash 执行 source ~/.bashrc

解决 GitBash 乱码问题

  1. 打开 GitBash 执行如下命令

    git config --golbal core.quotepath false
    
  2. $(git_home)/etc/bash.bashrc 文件最后加入下面两行

 export LANG="zh_CN.UTF-8"
 exportLC_All="zh_CN.UTF-8"

Git 项目搭建

创建工作目录与常用指令

工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。

日常使用只要记住下图6个命令:

image-20240618144227694.png

获取本地仓库

要使用 Git 对我们的代码进行版本控制,首先需要获取本地仓库

    1. 在电脑任意位置创建一个空目录(例如 test ) 作为我们的本地 Git仓库
    1. 进入这个目录中, 点击右键 打开 Git bash 窗口
    1. 执行命令 git init
    1. 如果创建成功后可以在文件下看到影藏的 .git 目录

基础操作命岭

Git 工作目录下对于文件的 修改 (增加、删除、更新)会存在几个状态,这些修改的状态随着我们执行 Git 命令而变化

image-20240618173906089.png

状态间的转换

  1. git add (工作区 ——> 暂存区)
  2. git commit( 暂存区——> 本地仓库 )
查看修改的状态(status)

作用: 查看的修改的状态 (暂存区、工作区)

命令形式:   git status

添加工作区到暂存区 (add)

​ 作用: 添加工作区一个或多个文件的修改到暂存区

命令形式:   git add 单个文件名| 通配符
将所有修改加入暂存区:  git add .

提交暂存区到本地仓库(commit)

​ 作用: 提交暂存区内容到本地仓库的当前分支

	命令形式:   git commit -m '注释内容'

查看提交日志(log)

​ 作用: 查看提交记录

命令形式:   git log [option]

	option:
		--all 显示所有分支
		--pretty = oneline 将提交信息显示为 一行
		-- abbrev-commit 使得输出的 commitId 更剪短
		-- graph 以图的形式显示

版本回退

作用: 版本切换

命令形式:   git reset --hard commitID
commitID: 可以使用 git -log 或 git log 指令查看

​ 如何查看已经删除的记录

​ 作用: 这个指令可以查看已经删除的提交记录

	 命令形式:   git reflog

Git 文件操作

文件4中状态

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

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

忽略文件

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

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

    1. 忽略文件中的空行或以井号(#)开始的行将会被忽略。
    1. 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
    1. 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
    1. 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
    1. 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。

#为注释
*.txt    #忽略所有 .txt结尾的文件,这样的话上传就不会被选中!

!lib.txt  #但lib.txt除外

/temp    #仅忽略项目根目录下的TODO文件,不包括其它目录temp

build/   #忽略build/目录下的所有文件

doc/*.txt 	#会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

分支

几乎所有的版本控制系统都以某种形式支持分支。使用分支意味着你可以把你的工作从开发主线上分离开来进行重大的 Bug 修改,开发新的功能,以免影响开发主线。

查看本地分支

命令:  git branch

创建本地分支

命令:  git branch 分支名

切换分支(checkout)

命令:  git checkout 分支名

我们还可以直接切换到一个不存在的分支(创建并切换)
命令: git checkout -b 分支名

合并分支(merge)

一个分支上的提交可以合并到另一个分支

命令:  git merge 分支名

删除分支

不能删除当前分支,只能删除其他分支

	命令:  git branch -d 分支名  	删除分支时, 需要做各种检查

	命令:  git branch -D 分支名 	不做任何检查,强制删除

解决冲突

​当两个分支上对文件的修改可能会存在冲突,例如同时修改了同一个文件的同一行,这时就需要手动解决冲突,解决冲突的步骤如下:

  1. 处理文件中冲突的地方
  2. 将解决完冲突的文件加入暂存区(add)
  3. 提交到仓库(commit)

冲突部分的内容处理如下所示:

image-20240619144506300.png

开发中分支使用原则和流程

​ 在开发中,一般有如下分支使用规则与流程:

   1. master (生产) 分支
     	线上分支,主分支,中小规模项目作为线上运行的应用对应的分支。
   
   2. develop (开发) 分支
      是从 master 创建的分支,一般作为开发部门的主要开发分支,如果没有其他并行开发	不同期上线要求,都可以在此版本进行开发,阶段开发完成后,需要时合并到 master 分	 	 支, 准备上线。
   
   3. feature / xxx 分支
      从 develop 创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的	研发任务完成后合并到 develop 分支。
   
   4. horfix / xxx 分支
      是从 master 创派生的分支,一般作为线上 Bug 修复使用,修复完成后需要合并到 	 master 、test 、 develop 分支。
   
   5. 还有一些其他分支, 在此不再详述,例如 test 分支(用于代码测试)、pre 分支(预上	  线分支)等等。
   

Git 远程仓库

github 是有墙的,比较慢,在国内的话,我们一般使用 gitee ,公司中有时候会搭建自己的gitlab服务器

这个其实可以作为大家未来找工作的一个重要信息!

注册码云

注册登录码云,完善个人信息

image-20240618150512532.png

配置SSH 公钥

设置本机绑定SSH公钥,实现免密码登录!(免密码登录,这一步挺重要的,码云是远程仓库,我们是平时工作在本地仓库!)

# 进入 C:\Users\Administrator\.ssh 目录

# 生成公钥
ssh-keygen -t rsa

image-20240618152212899.png

image-20240618152817048.png

将公钥信息public key 添加到码云账户中即可!

 私钥文件`id_rsa`
 
 公钥文件 `id_rsa.pub`
  • 用户可以通过主页右上角 个人设置」->「安全设置」->「SSH 公钥」->「添加公钥 ,添加生成的 public key 添加到当前账户中。

    需要注意: 添加公钥需要验证用户密码

image-20240618152907434.png

  • 获取公钥

    命令: 	cat ~/.shh/id_rsa.pub
    
  • 验证是否配置成功

    命令: 	ssh -T  git@gitee.com
    

操作远程仓库

创建远程仓库

image-20240618153044848.png

许可证:开源是否可以随意转载,开源但是不能商业使用,不能转载,... 限制!

image-20240618154414395.png

添加远程仓库

此操作时先初始化本地仓库,然后与已创建的远程仓库进行对接

	命令:	git remote add <远端名称><仓库路径>

	远端名称: 默认是 origin ,取决于远程服务器的设置。
	仓库路径: 从远程服务器获取此 URL。
	例如:  git remote add origin  https://gitee.com/hyee097/webStudyNote.git

查看远程仓库
命令:git remote

查看仓库
命令: git remote -v

删除远程仓库
命令: git remote remove origin

推送远程仓库

​我们刚才创建远程仓库的时候,没有勾选仓库初始化选项,所以仓库是空的,如果此时远程仓库不为空,则会推送失败。

# 如果本地分支为 master,使用这个指令
	git push -u origin master
  • 命令: git push [-f] [--set-upstream] [远端名称[本地分支]:[远端分支名] ]

    • 如果 远程分支名和本地分支名称相同,则可以只写本地分支。

      命令: git push origin master
      
    • 确信本地分支的历史是正确的,不需要合并远程分支的更改,可以使用--force选项强制推送

      命令: git push --force origin master 
      
    • -- set-upstream: 推送到远程的同时并建立与远程分支的关联关系

      命令:   git push --set-upstream origin master  	
      
    • 如果当 前分支已经与远程分支关联 ,则可以省略分支名和远端名

      命令:	git push 将 master 分支推送到 已关联的远端分支。
      

image-20240619172351867.png

本地分支与远程仓库关联关系
查看关联关系可以使用  git branch -vv 命令

从远程仓库克隆

如果已经有了一个远程仓库,我们可以直接 Clone 到本地

命令: git clone <仓库路径><本地目录>

例如: 
git clone [URL]  
https://gitee.com/hyee097/webStudy.git
git clone https://gitee.com/hyee097/webStudy.git

  • 本地目录可以省略,自动生成一个目录

image-20240618160246200.png

从远程仓库抓取和拉取

远程分支和本地分支一样,我们可以进行merge操作,只是需要先把远程仓库里面的更新都下载到本地,在进行操作。

抓取命令: git fetch [remote name] [branch name]

例如:  git fetch origin master
  • 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并

  • 如果不指定远端名和分支名,则抓取所有分支

   拉取命令:  git  pull  [remote name] [branch name]
         
   例如:  git pull origin master
  • 拉取指令就是将远程仓库的修改拉取到本地并自动进行合并,等同于 fetch + merge

  • 如果不指定远端名和分支名,则抓取所有并更新当前分支

  • 如果不想自动合并,可以使用--rebase选项来变基你的本地提交到远程分支的提交之上

    命令: git pull --rebase origin master
    
解决合并冲突

​ 在一段时间,A、B用户同时修改了同一个文件,且修改了同一位置代码,此时会发生合并冲突。

​ A用户在本地修改了代码后优先推送到远程仓库,此时B用户在本地修订代码,提交到本地仓库后,也需要推送到远程仓库,此时B用户晚于A用户,故需要先拉取远程仓库的提交,经过合并后才能推送到远程分支。

image-20240619194210771.png

在B用户拉取代码时,因为A、B用户同一段时间修改了同一文件的相同位置代码,故会发生合并冲突。远程分支也是分支,所以合并时冲突的解决方式和解决本地分支冲突相同

常见指令速查

基本操作类

git init : 初始化仓库

git log : 查看日志 (重要)

git add : <文件名> 添加到暂存区

git commit -m ‘注释内容’ : 提交到仓库

git merge <分支名> : 合并指定分支到当前活跃分支

分支切换

git checkout <分支名> : 切换到某个分支

git checkout -b <分支名> :创建并切换某个分支(即使分支原来不存在)

远程操作

git clone <远程地址><本地分支>: clone 远程仓库到本地

git pull : 拉取远程仓库的修改并合并

git push [--set-upstream] origin 分支名 : 推送本地到远程分支

--set-upstream: 表示和远程分支绑定关联关系,只有第一次推送时才需要此参数。