简述Git的使用

参考链接:

1、Git 详细安装教程(可以看这个安装Git)

2、廖雪峰----Git教程

3、【GitHub】保姆级使用教程(如果登不上GitHub可以看这个)

4、Github新手之路(全过程)(内含GitHub界面的操作和git指令的使用)

一、Git是什么?

Git是一个开源的分布式版本控制系统 ,由Linus Torvalds于2005年为管理Linux内核开发而创建。它的核心设计思想是分布式,即每个开发者的电脑上都拥有项目的完整历史仓库,这使其可以离线工作、操作速度快且数据安全性高。

你可以将Git理解为一个超级强大的"时间机器"和"协作白板"

  • 时间机器 :它能精确记录你的项目(代码、文档)在每一个时刻的样子。你可以随时回到任何一个过去的版本,查看当时写了什么,甚至撤销错误。

  • 协作白板:它允许多人在这块"白板"上并行工作,最后将所有修改巧妙地合并在一起,而不会互相覆盖。

其核心设计基于两个关键点:

  1. 快照,而非差异 :多数版本控制系统(如SVN)记录的是文件的差异 。而Git在每次提交时,会为所有文件创建一个快照。这就像一个迷你文件系统,让版本切换极快且非常可靠。

  2. 分布式架构 :这是Git的革命性设计。每个开发者的电脑上都有一个完整的仓库副本,包含全部历史。这意味着你可以离线工作,所有操作(提交、查看历史)都在本地瞬间完成,最后再与他人同步。

特性 集中式版本控制 (如 SVN) 分布式版本控制 (Git)
核心模型 单一的中央服务器 每个客户端都是完整仓库
网络需求 大多数操作需要联网 可完全离线工作
提交速度 依赖网络,较慢 本地操作,极快
数据安全 服务器是单一故障点 人人有完整备份,更安全

二、核心概念与工作流程

Git 的本质是「分布式版本控制系统」,核心是 "把文件的每一次修改都记录下来,随时能回滚、能协作"。要理解它,先记住 4 个 "存放文件的地方",用「快递打包」类比:

Git 区域 生活类比 核心作用
工作区(Workspace) 你的书桌 平时写代码、改文件的地方(草稿纸,改了还没整理)
暂存区(Staging) 快递打包台 把书桌里改好的文件 "挑出来",放到打包台,准备寄走(标记 "要提交的修改")
本地仓库(Repository) 家里的快递柜(自己的) 把打包台的文件最终封存,生成 "版本记录"(永久保存,能回滚)
远程仓库(Remote) 快递公司的仓库(比如 GitHub) 把自己快递柜的文件,同步到网上,方便和同事共享、备份

关键补充:

  1. 版本(Commit) :每次把暂存区文件存到本地仓库,都会生成一个 "版本快照"(类似给文件拍张照),有唯一的哈希值(一串乱码,比如a8b7c9),能精准定位这个版本。
  2. 分布式:每个人电脑上都有完整的本地仓库,哪怕断网也能改代码、存版本;联网后再和远程仓库同步 ------ 不像老式的 "集中式"(必须连服务器才能干活)。

三、Git 基础工作流程:从 "改代码" 到 "同步到网上"(7 步走)

用「写作文并同步到云盘」的场景,一步步讲清楚:

步骤 1:初始化仓库(第一次用)

  • 类比:你要写一篇作文,先建一个 "作文文件夹",并告诉 Git:"这个文件夹归你管了"。
  • 命令:git init(在文件夹里执行,会生成隐藏的.git文件夹,这就是本地仓库的核心)。
  • 补充:如果是从网上(比如 GitHub)拿现成的仓库,用git clone 仓库地址(相当于 "把云盘里的作文文件夹下载到本地")。

步骤 2:在工作区修改文件

  • 类比:你在作文文件夹里写 / 改作文(比如新建作文.txt,写了第一段)。
  • 此时 Git 状态:工作区有 "未跟踪 / 修改的文件",暂存区、本地仓库都没这个修改。
  • 查看状态命令:git status(会提示 "有未跟踪的文件",红色字体)。

步骤 3:把修改加入暂存区

  • 类比:你写完第一段,觉得没问题,把作文.txt放到 "打包台"(准备最终保存)。
  • 命令:
    • 单个文件:git add 作文.txt
    • 所有修改文件:git add ..代表当前文件夹所有)
  • 查看状态:git status会显示绿色字体,说明文件已进暂存区。

步骤 4:把暂存区文件提交到本地仓库

  • 类比:把打包台的作文封存,贴个标签(比如 "第一次写完开头"),放进自己的快递柜。
  • 命令:git commit -m "第一次写完作文开头"-m后面是 "版本备注",必须写,方便以后找)。
  • 关键:每次commit都会生成一个唯一的版本号 ,比如commit a8b7c9d0123456789abcdef

步骤 5:关联远程仓库(第一次推)

  • 类比:告诉 Git,你的作文要同步到哪个云盘(比如 GitHub 的仓库地址)。
  • 命令:git remote add origin 远程仓库地址origin是远程仓库的 "昵称",默认叫这个)。

步骤 6:把本地仓库的版本推送到远程仓库

  • 类比:把自己快递柜里的作文,寄到快递公司的仓库(云盘),方便同学看。
  • 命令:git push -u origin mainmain是分支名,现在 GitHub 默认分支叫 main,老版本是 master;-u第一次推,绑定本地和远程分支)。
  • 后续推送:直接git push就行。

步骤 7:从远程仓库拉取最新版本(协作时)

  • 类比:同学改了你的作文,你从云盘下载最新版到本地。
  • 命令:git pull origin main(把远程 main 分支的最新内容,拉到本地并合并)。

git init/clone → 改文件(工作区)→ git add .(暂存区)→ git commit -m "备注"(本地仓库)→ git push(远程仓库) ↓ 需要更新代码时 → git pull(把远程最新拉到本地)→ 继续改文件...

四、核心概念补充

1. 分支(Branch)(平行宇宙)

分支 不是复制文件,而是从某个提交点开始,创建一条新的独立时间线

  • 类比:你写作文时,想试两种开头,不用删原来的,复制一份作文,在副本上改(副本就是 "分支"),改好满意了再合并回原文。
  • 主分支 (main/master):默认分支是main(主分支),通常是存放稳定代码的主线。

  • 功能分支 :开发时一般建dev分支,从 提交C 分叉出去,你在上面开发新功能(提交D, E),无论怎么折腾,都不会影响主分支。开发完成后,可以合并回主分支。

  • 常用命令:
    • 新建分支:git checkout -b dev(新建并切换到 dev 分支)
    • 切换分支:git checkout main
    • 合并分支:在 main 分支执行git merge dev(把 dev 的修改合并到 main)

2. 回滚(Reset/Checkout)

  • 类比:你改坏了作文,想回到 "第一次写完开头" 的版本。
  • 简单回滚:git checkout 版本号 文件名(只恢复某个文件到指定版本)
  • 回滚本地仓库:git reset --hard 版本号(谨慎用!会清空工作区和暂存区的未提交修改)

3. 冲突(Conflict)

  • 类比:你和同学同时改了作文的同一句话,Git 不知道该留谁的,就会提示 "冲突"。
  • 解决:打开冲突文件,会看到<<<<<<< HEAD(你的修改)、=======(同学的修改)、>>>>>>> dev,手动删掉多余的,保留正确内容,再重新addcommit

五、git常用命令简单介绍

1、仓库创建与克隆(初始化项目)

命令 作用 示例与说明
git init 在当前目录新建一个Git仓库 git init 执行后当前目录会生成一个隐藏的 .git 文件夹
git clone <url> 下载一个已有远程仓库到本地 git clone https://github.com/user/project.git 这通常是参与项目的第一步

2、日常修改与提交(单人工作流)

这是你每天使用最频繁 的命令组合,对应 工作区 → 暂存区 → 仓库 的流程。

命令 作用 示例与说明
git status 查看工作区和暂存区的当前状态(最常用) git status 会显示:哪些文件修改了但未暂存、哪些已暂存待提交
git add <文件> 工作区的指定修改添加到暂存区 git add index.html git add src/ (添加整个src目录) git add . (添加所有修改和新增文件)
git commit -m "信息" 暂存区的内容永久提交到本地仓库,创建一个新版本 git commit -m "修复了登录按钮的点击bug" 提交信息务必清晰,这是好习惯的开始
git diff 查看工作区暂存区的差异(具体改了哪些代码) git diff (查看所有未暂存的修改) git diff --staged (查看已暂存但未提交的修改)

3、分支管理(多人协作与功能开发)

分支是Git的"杀手锏",让你能安全地并行开发。

命令 作用 示例与说明
git branch 列出所有本地分支 git branch 当前分支前会有一个 *
git branch <分支名> 创建一个新分支 git branch feature-payment
git checkout <分支名> 切换到指定分支 git checkout feature-payment git checkout -b hotfix-login ( 创建并立即切换,非常常用)
git switch <分支名> (Git 2.23+) 切换 分支,比checkout更直观 git switch main git switch -c new-feature (创建并切换)
git merge <分支名> 指定分支 合并到当前分支 git switch main git merge feature-payment (将支付功能分支合并到主分支)
git branch -d <分支名> 删除已合并的分支 git branch -d feature-payment (安全删除) git branch -D <分支名> (强制删除未合并的分支,慎用)
git log --oneline --graph 图形化查看分支合并历史 git log --oneline --graph --all 能非常清晰地看到分支从哪里创建、在哪里合并

4、远程协作(团队工作流)

命令 作用 示例与说明
git remote add <别名> <url> 将本地仓库与一个远程仓库关联 git remote add origin https://gitee.com/yourname/proj.git 通常远程仓库的别名默认为 origin
git push <远程> <分支> 将本地指定分支 的提交推送到远程仓库 git push origin main (推送到origin的main分支) git push -u origin main (-u 设置上游,以后可直接git push)
git pull <远程> <分支> 拉取 远程分支的最新提交并合并到当前分支 git pull origin main 相当于 git fetch + git merge,是获取团队更新的主要命令
git fetch <远程> 仅下载 远程仓库的最新数据,不自动合并 git fetch origin 更安全,让你先查看远程变化再决定是否合并
git remote -v 查看已关联的远程仓库地址 git remote -v

5、撤销与回退("后悔药")

命令 作用 示例与说明
git restore <文件> 丢弃工作区 中某个文件的修改(尚未git add git restore style.css (让style.css回到最后一次git addcommit的样子)
git restore --staged <文件> 将文件从暂存区 移回工作区 (撤销git add git restore --staged style.css (撤销对style.css的暂存,但修改内容还在工作区)
git commit --amend 修改最近一次提交的信息或追加文件 git commit --amend -m "新的提交信息" 注意: 如果已经push,修改后需要强制推送(push -f),团队协作时慎用
git reset <提交ID> 回退到某个提交版本 git reset --soft HEAD~1 (回退一个版本,但保留工作区和暂存区的修改) git reset --hard abc123 (危险! 彻底回退到abc123,之后的修改全部丢弃)

六、Git具体命令实际操作

1、Git安装(Git是一个版本控制系统,也是一个工具,跟Java类似)

Mac上自带Git,Windows系统要自己安装。

Windows:https://gitforwindows.org/

Linux:apt-get install git

2、Git命令列表

如何判断Git有没有安装成功?(Git 的安装请看上述的链接1), 在Git Bash命令行列里输入git,如果出现以下提示就说明成功了。

Git所有的操作命令都要以git开头。

3、切换到自己指定的Git仓库目录

提醒:在进行任何Git操作之前都需要在Git Bash中切换到Git仓库目录(你指定的目录),也就是先要切换到项目的文件夹目录下。

Windows用户直接手动建立一个项目文件夹(我在D盘下建立了gitProject文件夹作为测试),在文件夹里新建一个文件,比如说novel02.md(Markdown格式文件)。

Linux用户用命令来建立:

mkdir test (创建文件夹test)

cd test (切换到test目录)

touch a.md (新建a.md文件)

建立好之后,在git bash中使用cd指令,到达自己新建的git路径下。先随便操作一个命令,比如 git status来查看你当前git仓库的一些状态 ,可以看到如下提示(颜色无所谓):意思就是当前这个文件夹还不是一个Git仓库。

4、使用git init将当前文件夹变为git仓库

可以看到初始化成功,这时候Test01文件夹就是一个git仓库了。

紧接着,输入git status 查看工作区和暂存区的当前状态,

默认是在master分支。

这时最主要的提示就是a.md、b.md文件是Untracked files,就是说a.md、b.md这个文件还没被跟踪,还没有提交到git仓库里,而且提示你可以用git add <file> 去操作你想要提交的文件

5、使用 git add 将工作区的指定修改添加到暂存区

上面提示a.mdb.md 文件还没提交到仓库里,这时可以随便编辑一下 a.mdb.md 文件,然后输入 git add . (添加所有 修改和新增文件),再输入 git status

此时提示以下文件Changes to be committed,意思就是a.md 、b.md文件等待被提交。

当然你可以使用git rm --cached 这个命令去移除这个缓存。

6、使用git commit 将暂存区的内容永久提交到本地仓库,创建一个新版本

接着我们输入 git commit -m 'first commit',这个命令中 commit 就是提交的意思,-m 代表提交时的备注信息,即对这次提交的说明,执行了以上命令代表我们已经正式进行了第一次提交。

这时再输入git status,会提示 nothing to commit。

输入 git log 命令,会看到如下:

git log 命令可以查看所有产生的commit记录,所以可以看到已经产生了一条commit记录,提交时的备注信息就叫"first commit 创建了两个文件"。

git add 是先把改动添加到一个「暂存区」,你可以理解为一个缓存区域,临时保存你的改动,而git commit才是最后的提交。这样的好处就是防止误提交。

当然也有办法把这两步合并成一步,不过后面再介绍,建议新手按部就班的一步步来。

7、使用git branch 创建一个新分支

branch就是"分支"的意思。分支的概念很重要,尤其是团队协作开发的时候。

假设两个人都在做同一个项目,这个时候分支就是保证两人能协同合作的最大利器。

举个例子,A,B两人都在做同一个项目,但是是不同的模块。这个时候A新建了一个分支叫a,B新建了一个分支叫b,这样A,B做的所有代码改动都各自在各自的分支,互不影响,等到俩人都把各自的模块做完了,最后再统一把分支合并起来。

执行了git init ,初始化git仓库之后会默认生成一个主分支master,也是你所在的默认分支,也基本是实际开发正式环境下的分支,一般情况下master分支不会轻易直接再上面操作的,你们可以输入git branch 查看当前分支情况:

如果我们想在此基础上新建一个分支呢? 只需执行命令git branch a 就新建了一个名字叫 a 的分支。

而且这时候分支a和分支master是一模一样的内容,我们再输入git branch 查看当前的分支情况:

但是可以看到master分支前有个 * 号,即虽然新建了一个 a 的分支,但是当前所在的分支还是在master上。

如果我们想在a分支上进行开发,首先要切换到a分支上去,所以使用以下命令切换分支:

git checkout a

执行之后,再输入 git branch 查看分支情况;

可以看到当前我们所在分支已经到a上去了。也就是说,这时本地文件夹里的内容其实属于a 分支,A同学就可以在自己的本地上在他新建的a分支去进行代码改动了。

bash 复制代码
# 你在分支 a
$ git checkout a

# 在 Windows 中:
1. 打开 D:\self_study\gitProject\Test01 文件夹
2. 看到的是分支 a 的文件
3. 修改任何文件,都只影响分支 a
  • 分支只是指向不同提交的指针

  • 所有分支都共享同一个工作目录(就是你看到的文件夹)

  • 切换分支时,Git 会自动替换工作目录中的文件内容

git checkout -b a(这个命令是新建一个a分支,并且自动切换到a分支。)

8、git merge

A同学在a分支写了自己的代码,终于完工了他的功能,并且测试也都ok了,准备上线,这时候就需要把他本地的代码合并到GitHub上的主分支master上来,然后发布。

git merge 就是合并分支用到的命令.面对这种情况,需要做两步:

第一步是切换到master分支,如果你已经在了就不用切换了;

第二步是执行 git merge a,意思就是把a分支的代码合并过来。

不出意外的话,这时a分支的代码就顺利合并到master分支来了。但是在实际情况中,会经常出现"意外",也就是说经常会因为出现冲突而导致合并失败。这一点,后面讲。

9、git branch -d

有新建分支,就有删除分支。假如这个分支新建错了,或者a分支的代码已经顺利合并到master分支来了,那么a分支算是没用了(已经测试完的代码就合并到正式程序中去了),需要删除,这时执行git branch -d a就可以把a分支删除了。

10、git branch -D

有时候会删除失败,比如如果a分支的代码还没有合并到master,你执行 git branch -d a是删除不了的,它会智能提示你a分支还要未合并的代码,但是如果你非要删除,那就执行 git branch -D a就可以强制删除a分支。

11、git tag

我们在客户端开发的时候经常会有版本的概念,比如v1.0、v1.1之类的。

不同的版本肯定对应不同的代码,所以我们一般要给代码加上标签,这样假设v1.1版本出了一个新bug,但是又不知道v1.0是否有这个bug,有了标签就可以顺利切换到v1.0的代码,重新打个包测试了。

所以如果想要新建一个标签很简单,比如 git tag v1.0 就代表我在当前代码状态下新建了一个v1.0的标签,输入git tag可以查看历史tag记录。

如果建立了两个标签,v1.0和v1.1,需要切换的话,执行命令git checkout v1.0,这样就顺利的切换到v1.0 tag的代码状态了。

以上是一些最基本的Git操作,而且全是在本地环境进行操作的,完全没有涉及远程仓库,下一部分将以远程GitHub仓库为例,讲解下本地如何跟远程仓库一起同步协作。

七、向GitHub提交代码

1、SSH

SSH(Secure Shell) 是一种网络协议,用于在不安全的网络中安全地进行远程登录和执行命令。它通过加密技术保护数据传输的安全性。

大多数Git服务器都会选择使用SSH公钥来进行授权,所以想要在GitHub提交代码的第一步就是要先添加SSH key配置。

2、生成SSH key

Linux和Mac都是默认安装了SSH,而Windows系统安装了Git Bash也是带了SSH的。我们可以在终端(Windows下在Git Bash里)输入ssh 如果出现以下提示证明你本机已经安装了SSH,否则请自行搜索安装下:

紧接着输入 ssh-keygen -t rsa ,什么意思呢?就是指定rsa算法生成密钥,接着连续三个回车键(不需要输入密码),然后就会生成两个文件 id_rsa 和 id_rsa.pub ,而 id_rsa是密钥,id_rsa.pub 就是公钥。

这两个文件都是隐藏文件(Windows系统提供查看隐藏文件选项)默认在如下目录里生成:

Linux/Mac系统在 ~/.ssh

Windows在 C:\Users\username\.ssh

找到文件后接下来要做的就是把id_rsa.pub的内容添加到 GitHub上。

这样你本地的id_rsa密钥跟GitHub上的id_rsa.pub公钥进行配对,授权成功才可以提交代码。

3、在GitHub上添加SSH key

提示:如何查看 id_rsa.pub文件的内容?

Linux/Mac用户执行命令:

cd ~/.ssh

cat id_rsa.pub

Windows用户,设置显示隐藏文件,使用Notepad++或者EditPlus或Sublime打开复制就可以了。

SSH key添加成功之后,输入ssh -T git@github.com进行测试,如果出现以下提示说明添加成功:

4、Push (推)

如果你本地代码有更新了,那么就需要把本地代码推到远程仓库,这样本地仓库跟远程仓库就可以保持同步了。

代码示例:git push origin master

意思就是把本地代码推到远程master分支。

5、Pull(拉)

如果别人提交代码到远程仓库,这个时候你需要把远程仓库的最新代码拉下来,然后保证两端代码的同步。

代码示例:git pull origin master

意思就是把远程最新的代码更新到本地。

一般我们在push之前都会先pull,这样不容易冲突。

6、提交代码

添加SSH key成功之后,我们就有权限向GitHub上我们自己的项目提交代码了,提交代码有两种方法:

a、Clone自己的项目。

我们以我在GitHub上创建的项目为例,执行如下命令(注意,需要先在本地建立一个文件夹用来放置项目,然后在该文件夹内用Git Bash打开,执行命令):

git clone git@github.com:...... (git@github.com:......是你要复制的一个项目的仓库地址,这一部分的内容获取如下图所示)

这样就把myNovel项目clone到了本地,我们可以把clone理解为高级点的复制,这时候该项目本身就已经是一个git仓库了,不需要执行git init进行初始化,而且甚至都已经关联好了远程仓库,我们只需要在这个myNovel目录下任意修改或者添加文件,然后进行commit,之后就可以执行:

git push origin master

进行代码提交,这是最简单方便的一种方式。

至于怎样获取某个项目的仓库地址呢?(找到自己在github里建立的项目,然后如下图赋值git@github.com:......这段内容,放在git clone 后面)

b、关联本地已有项目

如果我们本地已经有一个完整的git仓库,并且已经进行了很多次commit,这个时候第一种方法就不适合了。

假设我们本地有个Test01的git项目,我们需要的是在GitHub上建一个test的项目,然后把本地Test01上所有代码的commit记录提交到GitHub上的test项目。

第一步就是在GitHub上建一个test项目,这个很简单。

第二步是把本地Test01项目与GitHub上的test项目进行关联,切换到Test01目录,执行如下命令: git remote add origin git@github.com:xxxx/test.git

什么意思?就是添加一个远程仓库,它的地址是 git@github.com:xxxx/test.git ,而 origin是给这个项目的远程仓库起的名字。

这个名字可以随便取,只是大家默认只有一个远程仓库时名字就是origin。

为什么要给远程仓库取名字?因为我们可能一个项目有多个远程仓库,比如GitHub一个,比如公司一个,这样的话提交到不同的远程仓库就需要指定不同的仓库名字了。

查看我们当前项目有哪些远程仓库时可以执行命令:git remote -v

接下来,我们本地的仓库就可以向远程仓库进行代码提交了:git push origin master

就是默认向GitHub上的test目录提交了代码,而这个代码是在master分支。

当然,也可以提交到指定的分支。

提醒:提交代码之前要设置一下自己的用户名和邮箱,因为这些信息会出现在所有的commit记录里,执行以下命令就可以设置;

git config --global user.name "KeneathGuo"

git config --global user.email "keneathguo@gmail.com"

八、新手避坑指南(最容易懵的点)

  1. "改了文件但 git status 没反应" :文件没被 Git 跟踪(第一次改的新文件),先执行git add
  2. "git push 提示拒绝" :远程仓库有最新版本,先git pull拉取合并,再推送。
  3. "commit 后发现写错备注"git commit --amend -m "新备注"(修改最后一次 commit 的备注)。
  4. "不小心 add 了不想提交的文件"git reset 文件名(把文件从暂存区撤回到工作区)。

九、总结:Git 的核心逻辑

Git 本质是 "给文件做版本快照",核心是「工作区→暂存区→本地仓库→远程仓库」的流转,分支是 "并行修改" 的工具,远程仓库是 "共享和备份" 的载体。

新手不用追求一次懂完,先按 "改文件→add→commit→push" 的流程练熟,遇到问题再查(比如冲突、回滚)

十、留言

如有问题,敬请指正。

相关推荐
kk哥88993 小时前
Git 远程仓库操作
大数据·git·elasticsearch
郑州光合科技余经理6 小时前
实战:攻克海外版同城生活服务平台开发五大挑战
java·开发语言·javascript·数据库·git·php·生活
CNRio7 小时前
Day 2:Git环境搭建全攻略:WindowsmacOSLinux三平台避坑指南
git
好好研究9 小时前
Git - tag标签和Git图像化界面
git·gitee
无限进步_10 小时前
【C语言&数据结构】有效的括号:栈数据结构的经典应用
c语言·开发语言·数据结构·c++·git·github·visual studio
不光头强11 小时前
git命令速查表
大数据·git·elasticsearch
大猫和小黄11 小时前
Ubuntu环境下GitBlit安装部署与版本库迁移
linux·运维·git·ubuntu·gitblit
野生yumeko11 小时前
wsl使用git
git·ssh·wsl
初学者_xuan11 小时前
Git&GitLab安装gitlab(rocky系统)
git·gitlab