【tips】Git使用指南

文章目录

一、Git介绍

1. 什么是Git

Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目,是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件

  • 版本控制

    版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术

  • 团队协作

    从单兵作战转换为团队开发

2.Git对比SVN

  • SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己的代码推送到中央服务器,集中式版本控制系统是必须联网才能工作

  • Git是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己电脑上,可以离线工作

3.Git安装

git官网下载

打开 cmd 窗口,输入指令检查是否安装成功

shell 复制代码
git --version

二.Git常用命令

1. git config

Git 中有三层 config 文件,分别为系统、全局、本地,对于同一配置项,优先级为本地 > 全局 > 系统,每层配置都会覆盖掉上一层的配置

查看不同级别配置文件

shell 复制代码
# 查看系统config  \Git\mingw64\etc\gitconfig包含适用于系统所有用户和所有项目的值
git config --system --list
  
# 查看当前用户(global)配置  C:\Users\Administrator.gitconfig
git config --global  --list
 
# 查看当前仓库配置信息  git项目目录中的.git/config,适用于当前项目
git config --local  --list

设置用户标识,以区分不同的开发人员,可以和远程不同

shell 复制代码
# 设置全局配置 --global
git config --global user.email "you@example.com"
git config --global user.name "Your Name"

# 设置本地用户标识
git config user.email "you@example.com"
git config user.name "Your Name"

# 删除配置项
git config [--local|--global|--system] --unset section.key

# 查看当前配置
git config --list

# 查看某个配置项
git config user.name

2. 初始化本地库

cd hello/是进入文件夹,cd ..是返回上一级文件夹,ls显示当前文件夹下的普通文件,ls -a显示所有

shell 复制代码
git init

初始化后文件夹内会多一个 .git 的文件夹(这个文件夹是一个隐藏文件夹)

3. 工作区、暂存区和版本库

工作区

当前目录下的所有文件,.git不属于工作区

版本库

.git这个目录是本地版本库(本地仓库),分为暂存区和main

托管平台

  • 局域网(内网):gitlab
  • 公网(外网):gitlab、github、gitee 码云

将工作区的代码提交至暂存区(stage),确定没有问题后提交到主分支 main ,即历史区,这时才会生成提交记录

如果需要再次提交,可以将之前 main 中的提交撤回到暂存区,在暂存区中一次性提交至 main 中,总共生成一次记录,避免记录混乱

最后推送远程仓库

4. git add

使用 git add 指令将代码提交至暂存区

shell 复制代码
# 把文件夹下的单独文件 index.txt 放在暂存区
git add index.txt
# 把文件夹下的单独一个文件夹 assets 放在暂存区
git add assets/
# 把文件夹下所有的内容都放在暂存区
git add --all
# git add --all 简单的写法
git add .

# 查看文件状态(绿色的表示在暂存区,红色的表示只在工作区)
git status

# 查看文件内容
cat index.txt

# 删除暂存区的文件
git rm --cached index.txt

5. git commit

使用git commit指令将暂存区的内容提交至历史区(版本库)

shell 复制代码
# 将暂存区的内容放到历史区(版本库),不加-m会进入vim模式,按i切换到insert模式,写注释(不要在#后面写,另起一行),然后按esc键,按:wq退出
git commit -m "message"

# 跳过 git add, 将所有已被跟踪的文件更改提交到版本库
git commit -am "message"

# 使用一次新的commit, 替代上一次提交,如果代码没有任何新变化, 则用来改写上一次commit的提交信息
git commit --amend -m "message"

使用 git log 指令查看版本信息

shell 复制代码
# 查看当前历史区版本信息,显示最顶端指针及以下的记录
git log
# 查看本地库所有的操作记录
git reflog

6. git reset 与 git revert

git reset

使用 git reset 版本编号 进行历史回退,回滚到对应的commit-id,共有如下三种命令方式:

--mixed:默认,可以不带该参数,回滚到所有git addgit commit命令执行之前,暂存区清空,全部到工作区

--soft:工作区不变,暂存区 = 原来的 + 回滚后和回滚前的版本差异

--hard:撤销工作区中所有未提交的修改内容,将所有工作区和暂存区的文件修改全部清空覆盖,不能找回

shell 复制代码
# 回退到上一次提交的版本
git reset --hard HEAD^

# 回退到上上次提交的版本 hard 之前从历史区回退到工作区
git reset --hard HEAD^^
git reset --hard HEAD~2
git reset --hard reflog中显示的回退前那一次的地址(或者前面的6个字母)

# soft从历史区回退到暂存区,比如注释写的不够详细可以回退到暂存区再写一下再推到历史区,或者修复了一个bug,把前面那个版本退回,将新代码推到暂存区,再一起推到历史区
git reset --soft HEAD^

head指针,表示当前指向的位置,head->main,每提交一次会向前一次,想回退版本让指针向回移动一次

回退后,此时git push会报错,因为本地库HEAD指向的版本比远程库要旧

使用-f参数强制推送

shell 复制代码
git push -f

git revert

"反做"某一个版本,撤销其中的commit-id并重新生成一个commit-id,以达到撤销该版本的修改的目的,本身不会对其他的提交commit-id产生影响,例如想要修改版本二,但不想影响版本三,则可用git revert修改版本二并生成新的版本四,不影响版本三

也就是说,撤销某次操作,此次操作之前和之后的 commit 和 history 都会保留,并且把这次撤销作为一次最新的提交,版本会递增且不影响之前提交的内容

如果要推送到远程服务器使用git push即可

shell 复制代码
# 撤销前一次 commit
git revert HEAD

# 撤销前前一次commit
git revert HEAD^

# 撤销某一次commit,会让程序员修改注释,如果想要使用默认注释添加 -n 或 --no-commit 参数
git revert commit_id

# 连续撤销多个commit
git revert -n commit_id_start..commit_id_end
# 或者下述写法
git revert -n commit_id_1
git revert -n commit_id_3

三. Git 分支

1.初识分支

git 在初始化的时候,会自动生成一个分支,叫做 main ,表示主要分支的意思

可以自己开辟出很多独立分支,每个功能是一个独立的分支

2.创建分支

使用 git branch 分支名称 指令开辟分支

shell 复制代码
# 开辟一个 login 分支
git branch login

查看当前分支情况

shell 复制代码
# 查看当前分支情况
git branch

前面有 * 号并且有高亮显示的,表示当前所处的分支

3.切换分支

使用 git checkout 分支名称git switch 分支名称指令来切换分支

建议使用switch命令,checkout是一个很底层的命令,可以完成很多事情,在特定情况下使用会造成困扰

shell 复制代码
# 切换到 login 分支
git checkout login
git switch login

# 创建一个新分支并切换到该分支,保留main中所有文件
git checkout -b login
git switch -c login

# 创建一个新分支并切换到该分支,删除所有跟踪文件
git switch --orphan login

按照分支将所有功能开发完毕后,只要把所有代码都合并到 main 主分支上就行了

4.合并分支

使用 git merge进行分支合并,将别的分支的内容合并到此时所处的分支上

shell 复制代码
# 切换到 main 分支
git switch main

# 把 login 的内容合并到自己的分支
git merge login

当两个分支对同一个文件均进行过修改时,合并后会产生冲突,需要手动合并(出现master|MERGING的时候),这时打开文件把需要留的东西留下需要删的东西删掉,然后重新add和commit就可以了(合并后的还是只在main里面,login里面还是他原来的子功能)

5.删除分支

切换到别的分支,使用 git branch -d 分支名称 指令删除分支

shell 复制代码
# 先切换到别的分支
git switch main

# 删除 login 本地分支
git branch -d login

# 强制删除
git branch -D login

# 有必要的情况下,删除远程分支
git push origin --delete login

四.远程仓库

1.创建远程仓库

在远程代码托管平台 github 中创建一个新仓库

2.添加仓库地址

使用 git remote add origin 仓库地址 地址添加远程仓库

shell 复制代码
# 添加仓库地址
git remote add origin <仓库地址>

# 删除仓库地址(比如第一次后面的地址写错了)
git remote remove origin

remote:远程

add:添加

origin:一个变量名(指代后面一长串的地址,即指代这个仓库,可以修改为别的名字)

3.git push

使用 git push 指令将历史区中的所有内容推送到远程仓库中

shell 复制代码
# 上传内容,推送到 main 分支
git push origin main

# 如果当前分支与多个主机存在追踪关系,使用 -u 参数指定一个默认主机,后面可以不加参数使用 git push
git push -u origin main

第二次上传时,因为有刚才的记录,不需要再写 originmain ,会默认传递到 origin 这个地址的 main 分支上,如果需要推送到其他分支,需要加以说明

shell 复制代码
# 第二次上传
git push

4.git clone

使用 git clone 仓库地址指令将远程仓库中的内容克隆一份到本地,默认克隆main主分支

可以克隆别人的 公开 的仓库,也可以克隆自己的仓库

shell 复制代码
# 克隆仓库主分支
git clone <仓库地址>

# 克隆远程指定分支
git clone -b <分支名> <仓库地址>

5.git pull

与远程仓库关联后,如果代码有他人进行更新,可以使用git pull获取最新代码

shell 复制代码
# 拉取远程 main 最新代码到本地分支 main 并进行合并
git pull origin master
git pull

如果远程和本地都有修改,再pull就会产生冲突,和当前一样手动合并,然后add,commit,push

提交分支git push origin login,再git pull origin login拉取,不会和主分支合并

对于bugfix分支,应该是切到master分支然后merge合并,然后把他删掉。如果已经将bugfix推上去了,可以用

git push origin :bugfix用空覆盖,将远程的bugfix分支删除

用fork把他人的项目整到自己的github上,然后对这个项目修改(clone......),然后pull后点pull request,如果作者批准并且merge就可以上到他的项目里

五.VScode集成Git

VSCode内置版本控制机制,并自带对Git和Github的支持,可以安装插件以支持其他控制软件,如SVN等,可以在其中进行可视化 git 管理

六. gitignore

在一些项目中,我们不想让本地仓库中所有文件都上传到远程仓库中,因为其中有一些测试文件、配置文件、依赖文件等,内容太大,并且我们只想展示源代码,则可以写一个.gitignore文件,将不需要推送的文件进行自动忽略

git 忽略规则匹配语法:

  • 空行不匹配任何文件,可作为分隔符,可用反斜杠转义
  • 如果本地仓库文件已被跟踪,那么即使在 .gitignore 中设置了忽略,也不起作用
  • .gitignore 文件也会被上传的到远程仓库,所以同一个仓库的人可以使用同一个.gitignore 文件
  • 对于一个项目,可以在最上层设置.gitignore文件,也可以在各个文件夹中设置,所以有根目录和当前目录指令的区别
shell 复制代码
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# dependencies
# 开头的是注释

# 忽略根目录下的 bin 文件
/bin

# 忽略当前路径下的 bin 文件夹
bin/

# 忽略当前路径下的.c文件,不忽略子目录中的.c文件
/*.c

# 忽略 bin 文件夹下的.c文件,不忽略子目录中.c文件
bin/*.c

# 忽略所有.log文件
*.log

# 忽略/bin, a/bin, a/b/bin等
**/bin

# 忽略a/b, a/x/b, a/x/y/b等
a/**/b

# 不忽略 bin 目录下的 run.sh 文件
!/bin/run.sh

# 忽略当前路径的 config.php 文件
config.php
相关推荐
Moonnnn.17 分钟前
51单片机学习——动态数码管显示
笔记·嵌入式硬件·学习·51单片机
灵感素材坊1 小时前
解锁音乐创作新技能:AI音乐网站的正确使用方式
人工智能·经验分享·音视频
电棍2333 小时前
verilog笔记
笔记·fpga开发
让我安静会3 小时前
Obsidian·Copilot 插件配置(让AI根据Obsidian笔记内容进行对话)
人工智能·笔记·copilot
mcusun20003 小时前
VScode 使用Deepseek又方便又好用的另一款插件
ide·vscode·编辑器·deepseek
leoufung4 小时前
VIM FZF 安裝和使用
linux·编辑器·vim
白水先森4 小时前
如何使用ArcGIS Pro高效查找小区最近的地铁站
经验分享·arcgis·信息可视化·数据分析
世事如云有卷舒4 小时前
FreeRTOS学习笔记
笔记·学习
CodeWithMe5 小时前
[ Vim ] 常用命令 and 配置
linux·编辑器·vim
luoyayun3615 小时前
Trae+Qt+MSVC环境配置
vscode·qt·环境配置·trae qt