Git 入门之道:从版本流转到基础操作

发布时间:2026/6/1 9:23:03

Git 入门之道:从版本流转到基础操作 一:git概述Git 本质上就是版本控制系统Git 可以管理电脑上的大部分文件比如.cpp .h .txt .md .html .css .js .doc 图片 视频其中,文本文件git可以知道你到底改了哪一行?而,二进制文件git大概知道你的文件的大小的变化.二:创建代码仓库的基本步骤1.创建文件夹首先在;linux机器里面创建一个文件夹gitcode2.git init进入文件夹,紧接着对git进行初始化3.配置用户名和邮箱有俩方式,一个是给当前仓库配置,还有一个是给全局配置我的理解就是,如果你在当前仓库配置了用户名和邮箱,那么就用这个,如果你配置了全局,这个时候就用就近的.就近原则局部创建与查看gitconfig user.namexxxgitconfig user.emailxxxxxxgitconfig-l全局创建与查看gitconfig--globaluser.namexxxxxgitconfig--globaluser.emailxxxxxgitconfig--global-l4.删除配置删除当前仓库配置gitconfig--unsetuser.namegitconfig--unsetuser.email删除全局配置gitconfig--global--unsetuser.namegitconfig--global--unsetuser.email注意git config --global 设置的就要用 git config --global --unset 删除。三工作区、暂存区、版本库1.git add添加到暂存区把 README.md 加入暂存区gitaddREADME.md也可以一次性添加当前目录下所有修改gitadd.这两个区别是gitaddREADME.md# 只添加 README.mdgitadd.# 添加当前目录下所有修改新手阶段可以先多用指定文件gitaddREADME.md这样不容易把乱七八糟的文件加进去。查看状态gitstatus这时候会看到类似Changes to be committed: new file: README.md说明文件已经进入暂存区等待提交。2.git commit提交到版本库提交命令gitcommit-m添加第一个 README 文件这里的 -m 是 message 的意思也就是本次提交说明。提交说明一定要认真写不要偷懒乱写因为以后你看历史记录时要靠这个说明判断每次提交做了什么。3.git log查看提交记录看历史提交git log你会看到类似commit xxxxxxxxxxxxxxxxxxxxxxxxx Author: zjh1234567890qq.comDate: Sun May3116:00:0020260800 添加三个测试文件这里面有几个关键信息commitid# 每次提交的唯一编号Author# 提交人Date# 提交时间提交说明# -m 后面写的内容其中 commit id 是一长串哈希值不是 1、2、3 这种递增编号。它长这样3f4a9c7d8e...以后版本回退、查看某次提交都需要用到它。简洁查看提交记录普通的 git log 内容比较多。可以用gitlog--prettyoneline或者更常用一点gitlog--oneline输出类似a1b2c3d 添加三个测试文件 f4e5d6c 添加第一个 README 文件这个更适合平时快速查看历史版本。4.基础命令总结# 1. 创建目录mkdirgitcodecdgitcode# 2. 初始化仓库gitinit# 3. 配置用户名和邮箱gitconfig--globaluser.namezjhgitconfig--globaluser.email12345678990qq.com# 4. 创建文件echohello gitREADME.md# 5. 查看状态gitstatus# 6. 添加到暂存区gitaddREADME.md# 7. 再次查看状态gitstatus# 8. 提交到版本库gitcommit-m添加 README 文件# 9. 查看提交记录gitlog# 10. 简洁查看提交记录gitlog--oneline图:命令作用git init初始化本地仓库ls -a查看隐藏文件比如.gitgit config user.name 名字配置当前仓库用户名git config user.email 邮箱配置当前仓库邮箱git config --global user.name 名字配置全局用户名git config --global user.email 邮箱配置全局邮箱git config -l查看 Git 配置git config --unset user.name删除当前仓库用户名配置git config --global --unset user.name删除全局用户名配置touch README.md创建文件git status查看当前仓库状态git add README.md添加指定文件到暂存区git add .添加当前目录所有修改到暂存区git commit -m 说明提交到版本库git log查看详细提交记录git log --oneline简洁查看提交记录四:.git 目录1.index:暂存区zjhVM-0-14-ubuntu:~/gitcode$ tree .git/ .git/ ├── branches ├── config ├── description ├── HEAD ├── hooks │ ├── applypatch-msg.sample │ ├── commit-msg.sample │ ├── fsmonitor-watchman.sample │ ├── post-update.sample │ ├── pre-applypatch.sample │ ├── pre-commit.sample │ ├── pre-merge-commit.sample │ ├── prepare-commit-msg.sample │ ├── pre-push.sample │ ├── pre-rebase.sample │ ├── pre-receive.sample │ ├── push-to-checkout.sample │ └── update.sample ├── info │ └── exclude ├── objects │ ├── info │ └── pack └── refs ├── heads └── tags9directories,17files上述就是git的目录下面是修改过的目录zjhVM-0-14-ubuntu:~/gitcode$vimReadMe zjhVM-0-14-ubuntu:~/gitcode$gitadd.zjhVM-0-14-ubuntu:~/gitcode$gitcommit-mchange ReadMe file[master(root-commit)959af1b]change ReadMefile1filechanged,1insertion()create mode100644ReadMe zjhVM-0-14-ubuntu:~/gitcode$ tree .git/ .git/ ├── branches ├── COMMIT_EDITMSG ├── config ├── description ├── HEAD ├── hooks │ ├── applypatch-msg.sample │ ├── commit-msg.sample │ ├── fsmonitor-watchman.sample │ ├── post-update.sample │ ├── pre-applypatch.sample │ ├── pre-commit.sample │ ├── pre-merge-commit.sample │ ├── prepare-commit-msg.sample │ ├── pre-push.sample │ ├── pre-rebase.sample │ ├── pre-receive.sample │ ├── push-to-checkout.sample │ └── update.sample ├── index ├── info │ └── exclude ├── logs │ ├── HEAD │ └── refs │ └── heads │ └── master ├── objects │ ├──15│ │ └── b8f2a8ffc8a7789b65fdcf2505f23ea9e4dde0 │ ├──28│ │ └── bd2c7b4dbf3b6cbbc348e895531a541837fa8e │ ├──95│ │ └── 9af1be07a65eac1ebd7e1d0d78ebcd17cf0662 │ ├── info │ └── pack └── refs ├── heads │ └── master └── tags15directories,25filesgit add 之后.git 里面会出现一个index这个 index 就是 Git 的暂存区。2.HEAD:当前指针执行命令zjhVM-0-14-ubuntu:~/gitcode$cat.git/HEAD ref: refs/heads/masterHEAD 指向 refs/heads/masterrefs/heads/master 保存了什么执行一下命令zjhVM-0-14-ubuntu:~/gitcode$cat.git/refs/heads/master 959af1be07a65eac1ebd7e1d0d78ebcd17cf0662这个就是最新一次提交的 commit id也就是说master 文件里面存的是最新提交的 commit id所以关系是HEAD → refs/heads/master → 最新 commit id3.objects对象库执行zjhVM-0-14-ubuntu:~/gitcode$ tree .git/objects .git/objects ├──15│ └── b8f2a8ffc8a7789b65fdcf2505f23ea9e4dde0 ├──28│ └── bd2c7b4dbf3b6cbbc348e895531a541837fa8e ├──95│ └── 9af1be07a65eac1ebd7e1d0d78ebcd17cf0662 ├── info └── pack5directories,3files你会看到很多两位字符命名的目录Git 的对象通常包括commit 对象保存一次提交的信息tree 对象保存目录结构blob 对象保存文件内容4.基础命令git status查看当前仓库状态zjhVM-0-14-ubuntu:~/gitcode$gitstatus On branch master nothing to commit, working tree cleangit diff查看具体改了什么zjhVM-0-14-ubuntu:~/gitcode$gitdiffReadMediff--gita/ReadMe b/ReadMe index cf77958..ad251cf100644--- a/ReadMe b/ReadMe -1,2 1,3 hello1 hello2 hello3 表示新增 - 表示删除注意git diff 是在你add之前的如果你add了那么这个修改就显示不出来了5,修改文件的标准提交流程gitstatusgitdiffREADME.mdgitaddREADME.mdgitstatusgitcommit-m修改 README 文件gitstatusgitstatus# 看哪些文件变了gitdiff# 看具体改了什么gitadd# 把修改放入暂存区gitstatus# 确认已经进入暂存区gitcommit-m# 提交到版本库gitstatus# 确认工作区干净五版本回退1.git reset该命令后面可以分别加:--soft--mixed--hardGit 有三个区域工作区 暂存区 版本库reset 本质上一定会影响版本库 HEAD 指向但是是否影响工作区、暂存区取决于参数。1.1 git reset --soft commit_id区域是否回退工作区不回退暂存区不回退版本库回退适合场景commit 提交错了但代码还想保留而且还想保留在暂存区。1.2. git reset --mixed commit_id–mixed 是默认选项区域是否回退工作区不回退暂存区回退版本库回退适合场景commit 提交错了想取消提交也想取消 add但代码还留在工作区。1.3. git reset --hard commit_id区域是否回退工作区回退暂存区回退版本库回退强制回到某个版本当前没提交的东西可能直接没了。1.4.回退到某个历史版本先查看历史gitlog--oneline假设输出999cead 修改 README 文件 58abc12 添加 README 文件如果你想回到58abc12执行gitreset--hard58abc12然后查看 README.mdcatREADME.md它就会回到旧版本。2.HEADHEAD:表示当前版本。HEAD^:表示上一个版本。HEAD^^:表示上上个版本。比如回退到上一个版本gitreset--hardHEAD^3. git reflog如果你回退之后执行gitlog--oneline你可能发现之前的提交记录看不到了。这时候怎么办用gitrefloggit reflog 会记录你本地 HEAD 的移动记录包括commit reset checkout比如999cead HEAD{0}: reset: moving to HEAD^ 58abc12 HEAD{1}: commit: 添加 README 文件 999cead HEAD{2}: commit: 修改 README 文件你如果想回到 999cead可以gitreset--hard999cead所以gitlog# 看当前历史gitreflog# 看你本地操作过的历史但是注意前提是你还能找到那个 commit id。六git reflog所谓撤销修改就是我写了一些垃圾代码不想要了想恢复到之前干净的状态。情况一只改了工作区还没有 git add这时候修改只存在于工作区,它还没有进入暂存区解决方式git checkout – 文件名注意中间的两个横线--因为 checkout 还有切换分支的含义情况二已经 git add但是还没有 git commit现在修改存在于工作区 暂存区但是还没有进入版本库。分两步第一步把暂存区撤掉gitreset HEAD README.md这一步之后修改还在工作区但是不在暂存区了。第二步撤销工作区修改gitcheckout -- README.md完整命令gitreset HEAD README.mdgitcheckout -- README.md执行完后gitstatus工作区就干净了。情况三已经 git commit但是还没有 git push现在错误代码已经进入工作区 暂存区 版本库但是还没有推送到远程仓库。解决方式回退到上一个版本gitreset--hardHEAD^或者gitreset--hardHEAD~1意思是把工作区、暂存区、版本库都回退到上一个版本。三种撤销情况总结表场景修改在哪里解决方式只修改了工作区没 add工作区git checkout -- 文件名已经 add没 commit工作区 暂存区git reset HEAD 文件名git checkout -- 文件名已经 commit没 push工作区 暂存区 版本库git reset --hard HEAD^七删除文件rm git add git commit1.复杂删除就和提交文件一样你在工作区删除了code.cc那么你就需要add cmmit 这个样就可以影响到暂存区和版本库2.简化删除git rmGit 提供了一个更简单的命令gitrmfile4它等价于帮你做了两件事rmfile4gitaddfile4也就是删除工作区文件 并且把删除操作加入暂存区所以你只需要再 commitgitcommit-m删除 file4完整流程gitrmfile4gitcommit-m删除 file4命令做了什么后面还需要rm file5只删除工作区文件git add file5git commitgit rm file5删除工作区文件并加入暂存区git commit八总结表-分类命令作用重点理解 / 使用场景创建目录mkdir gitcode创建一个项目目录先准备一个普通目录用来放项目文件进入目录cd gitcode进入项目目录后续 Git 操作一般都在项目目录下执行初始化仓库git init初始化 Git 本地仓库执行后会生成.git隐藏目录查看隐藏文件ls -a查看当前目录下的隐藏文件可以确认是否生成了.git查看目录结构tree .git查看.git目录结构学习 Git 内部原理时使用查看.git内容ls .git查看.git目录下有哪些文件常见有HEAD、objects、refs、index等当前仓库配置用户名git config user.name zjh给当前仓库配置用户名只对当前仓库生效当前仓库配置邮箱git config user.email 1937228573qq.com给当前仓库配置邮箱只对当前仓库生效全局配置用户名git config --global user.name zjh配置全局用户名当前电脑所有 Git 仓库默认使用这个用户名全局配置邮箱git config --global user.email 1234567890qq.com配置全局邮箱当前电脑所有 Git 仓库默认使用这个邮箱查看所有配置git config -l查看当前生效的 Git 配置会同时显示全局配置和当前仓库配置查看全局配置git config --global -l只查看全局配置用来确认全局用户名和邮箱删除当前仓库用户名git config --unset user.name删除当前仓库的用户名配置不影响全局配置删除当前仓库邮箱git config --unset user.email删除当前仓库的邮箱配置不影响全局配置删除全局用户名git config --global --unset user.name删除全局用户名配置删除--global设置的内容必须加--global删除全局邮箱git config --global --unset user.email删除全局邮箱配置删除全局配置时使用创建文件touch README.md创建一个空文件Linux 下常用创建文件命令写入内容echo hello git README.md向文件写入内容覆盖原内容会覆盖原文件内容追加内容echo hello world README.md向文件末尾追加内容不会覆盖原内容查看文件内容cat README.md查看文件内容用来确认文件当前内容查看仓库状态git status查看工作区、暂存区状态最常用命令之一能看到哪些文件被修改、哪些文件已暂存添加指定文件到暂存区git add README.md把指定文件的修改添加到暂存区add添加的是“修改”不是简单添加文件添加多个文件到暂存区git add file1 file2 file3一次性添加多个文件到暂存区多个文件名之间用空格隔开添加当前目录所有修改git add .把当前目录下所有修改添加到暂存区新手慎用容易把不想提交的文件也加进去提交到版本库git commit -m 添加 README 文件把暂存区内容提交到版本库-m后面写本次提交说明查看详细提交记录git log查看完整提交历史包括 commit id、作者、时间、提交说明简洁查看提交记录git log --oneline一行显示一个提交记录日常更常用方便看历史版本另一种一行日志git log --prettyoneline一行显示一个提交记录老师课上使用过这种写法查看工作区和暂存区差异git diff查看还没有git add的修改内容默认比较工作区和暂存区查看指定文件差异git diff README.md查看某个文件具体修改了什么能看到哪一行新增、删除、修改查看版本库和工作区差异git diff HEAD -- README.md查看当前版本库和工作区的区别HEAD表示当前版本查看 HEAD 指向cat .git/HEAD查看 HEAD 当前指向哪个分支常见结果是ref: refs/heads/master查看 master 指向cat .git/refs/heads/master查看 master 当前指向的 commit id里面保存的是最新一次提交的 commit id查看 Git 对象git cat-file -p commit_id查看某个 Git 对象的内容可以查看 commit、tree、blob 对象查看当前版本HEAD表示当前版本常用于 reset、diff 等命令表示上一个版本HEAD^表示当前版本的上一个版本常用于版本回退表示上两个版本HEAD^^表示当前版本的上上个版本^可以连续写表示上一个版本HEAD~1表示当前版本往前 1 个版本和HEAD^类似表示上两个版本HEAD~2表示当前版本往前 2 个版本数字表示往前几个版本只回退版本库git reset --soft commit_id只让版本库回退不动暂存区和工作区代码和暂存区内容都保留回退版本库和暂存区git reset --mixed commit_id回退版本库和暂存区不动工作区--mixed是默认选项默认 resetgit reset commit_id默认等价于git reset --mixed commit_id不写参数时就是 mixed强制回退所有区域git reset --hard commit_id工作区、暂存区、版本库全部回退危险命令会丢掉工作区修改慎用回退到上一个版本git reset --hard HEAD^强制回退到上一个版本已提交但没 push 时可用于撤销 commit回退到上一个版本git reset --hard HEAD~1强制回退到上一个版本和HEAD^类似回退到上两个版本git reset --hard HEAD~2强制回退到上两个版本根据数字决定回退几个版本查看本地操作历史git reflog查看 HEAD 移动历史用来找回被 reset 后git log看不到的 commit id根据 reflog 找回版本git reset --hard commit_id回到 reflog 中某个历史版本前提是能找到对应 commit id撤销工作区修改git checkout -- README.md撤销 README.md 在工作区中的修改适用于修改了文件但还没git add新版撤销工作区修改git restore README.md撤销工作区修改新版本 Git 推荐写法取消暂存git reset HEAD README.md把 README.md 从暂存区撤回工作区适用于已经git add但还没git commit新版取消暂存git restore --staged README.md把文件从暂存区撤回来新版本 Git 推荐写法已 add 但未 commit 的完整撤销git reset HEAD README.md git checkout -- README.md先取消暂存再撤销工作区修改对应“工作区 暂存区都有错误修改”的情况已 commit 但未 push 的撤销git reset --hard HEAD^回退到上一个提交前提是还没有 push 到远程仓库删除工作区文件rm file5只删除工作区中的文件删除后还需要git add file5提交删除操作到暂存区git add file5把删除 file5 这个修改加入暂存区删除也是一种修改所以也可以git add提交删除操作git commit -m 删除 file5把删除操作提交到版本库真正让版本库也删除该文件Git 删除文件git rm file4删除工作区文件并自动加入暂存区等价于rm file4git add file4提交 git rm 删除git commit -m 删除 file4提交删除操作git rm后仍然需要 commit普通删除完整流程rm file5 git add file5 git commit -m 删除 file5删除文件的三步流程先删工作区再加入暂存区再提交Git 删除完整流程git rm file4 git commit -m 删除 file4删除文件的简化流程推荐使用少一步最常用初始化流程mkdir gitcode cd gitcode git init创建目录并初始化仓库新项目开始时使用最常用提交流程git status git add . git commit -m 提交说明查看状态、添加修改、提交版本日常开发最常用流程修改文件标准流程git status git diff git add README.md git commit -m 修改 README 文件修改文件后的标准提交步骤先看状态和差异再提交查看历史标准流程git log --oneline快速查看提交历史找 commit id 时常用回退找回标准流程git reflog git reset --hard commit_id找回历史版本reset 后后悔时使用核心流程工作区 --git add-- 暂存区 --git commit-- 版本库Git 本地提交主线必须记住核心原则commit 只提交暂存区内容没有 add 的内容不会被 commitfile4 add 了file5 没 addcommit 时只提交 file4核心原则Git 追踪的是修改不是文件新增、删除、修改都属于修改所以删除文件后也要git add核心警告不要手动修改 .git 目录.git是版本库核心目录乱改可能导致仓库损坏核心警告git reset --hard 慎用会回退工作区、暂存区、版本库可能把没保存的代码直接干掉

相关新闻