【tips】Git使用指南

news/2024/5/17 19:46:04 标签: git, 笔记, github, vscode, vim, gitee, 经验分享

文章目录

  • 一、Git介绍
    • 1. 什么是Git
    • 2.Git对比SVN
    • 3.Git安装
  • 二.Git常用命令
    • 1. git config
    • 2. 初始化本地库
    • 3. 工作区、暂存区和版本库
    • 4. git add
    • 5. git commit
    • 6. git reset 与 git revert
  • 三. Git 分支
    • 1.初识分支
    • 2.创建分支
    • 3.切换分支
    • 4.合并分支
    • 5.删除分支
  • 四.远程仓库
    • 1.创建远程仓库
    • 2.添加仓库地址
    • 3.git push
    • 4.git clone
    • 5.git pull
  • 五.VScode集成Git
  • 六. gitignore

一、Git介绍

1. 什么是Git

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

  • 版本控制

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

  • 团队协作

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

2.Git对比SVN

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

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

3.Git安装

git官网下载

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

git --version

 

二.Git常用命令

git_config_40">1. git config

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

查看不同级别配置文件

# 查看系统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

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

# 设置全局配置 --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显示所有

git init

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

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

工作区

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

版本库

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

托管平台

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

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

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

最后推送远程仓库

git_add_115">4. git add

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

# 把文件夹下的单独文件 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

git_commit_141">5. git commit

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

# 将暂存区的内容放到历史区(版本库),不加-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 指令查看版本信息

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

git_reset__git_revert_167">6. git reset 与 git revert

git_reset_169">git reset

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

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

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

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

# 回退到上一次提交的版本
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参数强制推送

git push -f

git_revert_202">git revert

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

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

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

# 撤销前一次 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 分支名称 指令开辟分支

# 开辟一个 login 分支
git branch login

查看当前分支情况

# 查看当前分支情况
git branch

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

3.切换分支

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

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

# 切换到 login 分支
git checkout login
git switch login

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

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

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

4.合并分支

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

# 切换到 main 分支
git switch main

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

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

5.删除分支

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

# 先切换到别的分支
git switch main

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

# 强制删除
git branch -D login

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

 

四.远程仓库

1.创建远程仓库

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

2.添加仓库地址

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

# 添加仓库地址
git remote add origin <仓库地址>

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

remote:远程

add:添加

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

git_push_338">3.git push

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

# 上传内容,推送到 main 分支
git push origin main

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

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

# 第二次上传
git push

git_clone_359">4.git clone

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

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

# 克隆仓库主分支
git clone <仓库地址>

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

git_pull_375">5.git pull

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

# 拉取远程 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_407">六. gitignore

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

git 忽略规则匹配语法:

  • 空行不匹配任何文件,可作为分隔符,可用反斜杠转义
  • 如果本地仓库文件已被跟踪,那么即使在 .gitignore 中设置了忽略,也不起作用
  • .gitignore 文件也会被上传的到远程仓库,所以同一个仓库的人可以使用同一个.gitignore 文件
  • 对于一个项目,可以在最上层设置.gitignore文件,也可以在各个文件夹中设置,所以有根目录和当前目录指令的区别
# 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

http://www.niftyadmin.cn/n/5455518.html

相关文章

python---流程控制语句(if、while、for、break、continue..)

目录 一、前言二、为什么学习判断语句三、if 语句的基本格式3.1判断语句3.2 if 语句的注意事项3.3 if-else 语句3.4 嵌套使用 四、循环语句4.1 循环语句的作用4.2 while 循环语句 五、for 循环六、range 语句七、for循环和while循环的对比八、continue、break 一、前言 进行逻…

C++ Primer学习练习——第三章 字符串、向量和数组

第三章 字符串、向量和数组 引言1、using声明练习3.1 2、string定义和初始化string对象练习3.2练习3.3练习3.4练习3.5 3、string对象上的操作处理string对象中的字符练习3.6练习3.7练习3.8练习3.9练习3.10练习3.11 4、vector定义和初始化vector对象练习3.12练习3.13向vector对象…

程序员35岁会失业吗?

确实&#xff0c;35岁在IT行业有时会被视为一个重要阶段&#xff0c;但并不一定是负面的分水岭。一方面&#xff0c;随着年龄的增长&#xff0c;程序员确实需要应对技术的快速更新&#xff0c;保持持续学习和自我提升的习惯至关重要。尤其在新兴技术和框架层出不穷的今天&#…

大模型时代下的“金融业生物识别安全挑战”机遇

作者&#xff1a;中关村科金AI安全攻防实验室 冯月 金融行业正在面临着前所未有的安全挑战&#xff0c;人脸安全事件频发&#xff0c;国家高度重视并提出警告&#xff0c;全行业每年黑产欺诈涉及资金额超过1100亿元。冰山上是安全事件&#xff0c;冰山下隐藏的是“裸奔”的技术…

linux系统装载nginx的笔记

作为一个前端开发&#xff0c;自己部署一个前端项目是不是很正常的事情&#xff0c;所以我在这里记录一下自己在linux环境中通过nginx部署前端项目的步骤&#xff0c;方便后面查看。 步骤如下&#xff1a; 1、使用管理员身份进入命令窗口&#xff0c;如果进入时提示&#xff0…

DFS算法(C/C++)(内含立例题)

DFS&#xff1a; DFS又称深度优先搜索&#xff0c;是一种图运算方法&#xff0c;它从第一个节点走起&#xff0c;一直往下走&#xff0c;一直走到不能继续再走&#xff0c;就返回上一个节点&#xff0c;继续搜索其他地方&#xff0c;直到找到目标节点为止。 DFS可以解决迷宫问…

Tuxera for Mac2024免费读写硬盘U盘工具

作为软件产品专家&#xff0c;我对各类软件都有较为深入的了解&#xff0c;下面介绍Tuxera for Mac这款读写硬盘/U盘工具的相关信息&#xff1a; Tuxera for Mac是一款高效稳定的NTFS读写工具&#xff0c;专为解决Mac系统无法直接读写NTFS格式驱动器的问题而设计。它提供了完整…

Python爬虫之Scrapy框架系列(25)——分布式爬虫scrapy_redis完整实战【ZH小说爬取】

本篇文章要做的是&#xff1a;将之前做的使用Scrapy中Crawl模板爬取纵横小说的项目改编为使用Scrapy_redis的项目&#xff01;&#xff01;&#xff01; 目录&#xff1a; 每篇前言&#xff1a;1.首先&#xff0c;将之前的项目改为单个的使用scrapy\_redis的分布式爬虫项目。第…