Git与TortoiseGit使用教程:第二章 Git常用命令及TortoiseGit使用教程

Git与TortoiseGit使用教程:第二章 Git常用命令及TortoiseGit使用教程

Git与TortoiseGit使用教程

第一章 Git的安装及SSH公钥配置 第二章 Git常用命令及TortoiseGit使用教程 第三章 Gitee仓库同步到GitHub @TOC

前言

上一章介绍了Git的安装和SSH公钥配置,环境已经准备好了。本章接着讲实际怎么用,分两部分:

  • Git常用命令:按使用场景整理,重点是"什么时候该用哪条",而不是把手册抄一遍;
  • TortoiseGit(小乌龟) :把上面这些命令换成右键菜单操作,日常开发用它效率更高。 个人的建议是:命令行至少要能看懂,图形界面用来提效。因为出问题的时候(比如冲突、误回滚),网上给的解决方案九成九是命令行的;而日常提交、拉取这类重复操作,右键点两下确实比敲命令快。 本章环境同上一章:Windows 10/11 64位,远程仓库以Gitee为例。

一、先理清Git的工作流程

在敲命令之前,把上一章提到的四个区域再过一遍,所有命令都是在这四个区域之间搬运文件:

css 复制代码
工作区  --git add-->  暂存区  --git commit-->  本地仓库  --git push-->  远程仓库

文件在Git眼中有四种状态:

状态 含义 如何进入下一步
Untracked(未跟踪) 新建的文件,Git还不管它 git add
Modified(已修改) 已跟踪的文件被改动了,但没加入暂存区 git add
Staged(已暂存) 已加入暂存区,等待提交 git commit
Committed(已提交) 已保存到本地仓库 git push 推到远程

git status 这条命令的作用,就是随时告诉你每个文件现在处于哪种状态。遇到不确定的情况,先敲 git status ,它的提示信息里通常就带着下一步该用什么命令。

二、Git常用命令及使用场景

1.创建仓库

场景一:本地已有项目,想纳入版本管理

在项目文件夹里右键 → Open Git Bash here

bash 复制代码
git init                    # 初始化,生成隐藏的.git目录

执行后目录下会多出一个 .git 隐藏文件夹,所有版本历史都存在这里,不要手动去删改它

场景二:从远程仓库拉一份到本地(最常用)

bash 复制代码
git clone git@gitee.com:用户名/仓库名.git          # SSH方式(推荐)
git clone https://gitee.com/用户名/仓库名.git      # HTTPS方式
git clone git@gitee.com:用户名/仓库名.git myproj   # 指定本地文件夹名
git clone -b dev git@gitee.com:用户名/仓库名.git   # 只克隆dev分支

在这里插入图片描述

2.日常提交三连(用得最多)

bash 复制代码
git add .                          # 把当前目录所有改动加入暂存区
git commit -m "修复串口接收丢包问题"   # 提交到本地仓库,-m后面是提交说明
git push                           # 推送到远程仓库

git add 的几种用法:

bash 复制代码
git add 文件名.c          # 添加指定文件
git add *.c              # 添加所有.c文件
git add src/             # 添加整个目录
git add .                # 添加当前目录下所有改动(含新增、修改、删除)
git add -A               # 添加整个仓库的所有改动

关于 git commit

bash 复制代码
git commit -m "提交说明"           # 常规提交
git commit -am "提交说明"          # add + commit 合并(仅对已跟踪文件有效,新文件不行)
git commit --amend                # 修改上一次的提交说明(还没push时用)
git commit --amend --no-edit      # 把当前改动并入上一次提交,说明不变

提交说明怎么写 :写清楚"改了什么、为什么改",别写"update""修改""1"这种。团队里常用的格式是 类型: 描述,例如:

makefile 复制代码
feat: 增加ADC采样滤波功能
fix: 修复I2C超时导致的死循环
docs: 补充寄存器配置说明

3.查看状态与历史

bash 复制代码
git status                  # 查看当前状态(最常用,多敲没坏处)
git status -s               # 简洁模式输出

git log                     # 查看提交历史
git log --oneline           # 一行一条,看起来清爽
git log --oneline --graph --all   # 图形化显示分支走向,很实用
git log -3                  # 只看最近3条
git log -p 文件名            # 查看某个文件的改动历史及具体内容

git diff                    # 工作区 vs 暂存区 的差异
git diff --cached           # 暂存区 vs 最后一次提交 的差异
git diff HEAD               # 工作区 vs 最后一次提交 的差异
git diff 分支A 分支B         # 比较两个分支

4.撤销与回滚(重点,也是最容易搞砸的)

这部分建议单独记,用错命令可能真的会丢代码。 (1)改乱了工作区文件,想恢复到上次提交的样子

bash 复制代码
git checkout -- 文件名        # 老写法
git restore 文件名            # 新写法(Git 2.23+,推荐)
git restore .                # 恢复所有文件

⚠️ 这个操作不可恢复,工作区的改动会直接丢失,执行前确认清楚。

(2)git add 加错了,想从暂存区撤出来(但保留改动)

bash 复制代码
git reset HEAD 文件名         # 老写法
git restore --staged 文件名   # 新写法(推荐)

(3)已经commit了,想撤销这次提交

bash 复制代码
git reset --soft HEAD^     # 撤销提交,改动保留在暂存区(最温和)
git reset --mixed HEAD^    # 撤销提交,改动保留在工作区(默认值)
git reset --hard HEAD^     # 撤销提交,改动全部丢弃(危险!)

其中 HEAD^ 表示上一个版本,HEAD^^ 是上上个,HEAD~5 是往前5个。

(4)回退到指定的某个历史版本

bash 复制代码
git log --oneline           # 先查到目标版本的commit id,如 a1b2c3d
git reset --hard a1b2c3d    # 回退到该版本

(5)reset过头了,想再回来

bash 复制代码
git reflog                  # 查看所有操作记录,包括被reset掉的提交
git reset --hard 目标commit id

git reflog后悔药 ,只要没执行 git gc,几乎所有误操作都能靠它找回来。这条命令一定要记住。

(6)撤销某次提交,但保留历史记录(已推送到远程时用)

bash 复制代码
git revert commit_id        # 生成一个新提交来抵消指定提交的改动

resetrevert 怎么选

  • 提交还没push 到远程 → 用 reset,直接抹掉,历史干净;
  • 提交已经push 了,别人可能拉过 → 用 revert,用一次新提交去抵消。强行 reset 后再 push -f 会把别人的记录搞乱。 (7)临时保存现场(写到一半要切分支救急)
bash 复制代码
git stash                   # 把当前工作区改动暂存起来,工作区变干净
git stash save "说明"        # 带说明的暂存
git stash list              # 查看暂存列表
git stash pop               # 恢复最近一次暂存并从列表删除
git stash apply stash@{1}   # 恢复指定的暂存,但不从列表删除
git stash drop stash@{0}    # 删除指定暂存
git stash clear             # 清空所有暂存

5.分支操作

分支是Git的核心优势。开发新功能、修bug都应该开新分支,避免污染主分支

bash 复制代码
git branch                        # 查看本地分支,带*的是当前分支
git branch -a                     # 查看所有分支(含远程)
git branch -v                     # 查看分支及最后一次提交

git branch dev                    # 创建dev分支
git checkout dev                  # 切换到dev分支
git checkout -b dev               # 创建并切换(常用,等于上面两条)
git switch dev                    # 新写法,切换分支
git switch -c dev                 # 新写法,创建并切换

git merge dev                     # 把dev分支合并到当前分支
git branch -d dev                 # 删除dev分支(未合并的会拒绝删除)
git branch -D dev                 # 强制删除
git push origin --delete dev      # 删除远程dev分支

git branch -m 旧名 新名            # 重命名分支

一个典型的功能开发流程:

bash 复制代码
git checkout main                 # 回到主分支
git pull                          # 拉取最新代码
git checkout -b feature-uart      # 开一个功能分支
# ...在这里写代码、多次commit...
git checkout main                 # 功能完成,回到主分支
git pull                          # 再拉一次,防止别人有新提交
git merge feature-uart            # 合并功能分支
git push                          # 推送
git branch -d feature-uart        # 删除已合并的功能分支

6.远程仓库操作

bash 复制代码
git remote -v                                              # 查看已关联的远程仓库
git remote add origin git@gitee.com:用户名/仓库名.git        # 关联远程仓库
git remote rm origin                                       # 解除关联
git remote set-url origin 新地址                            # 修改远程地址

git push -u origin main       # 首次推送,-u建立追踪关系,之后直接git push即可
git push                      # 推送当前分支
git push origin dev           # 推送指定分支
git push --tags               # 推送所有标签

git fetch                     # 只拉取远程更新,不自动合并(安全)
git pull                      # 拉取并合并 = fetch + merge
git pull --rebase             # 拉取并变基,历史更线性

本地已有项目关联到远程仓库,完整流程是:

bash 复制代码
git init
git add .
git commit -m "初始化提交"
git remote add origin git@gitee.com:用户名/仓库名.git
git pull --rebase origin master     # 远程若有README等文件,先拉下来
git push -u origin master

如果 git remote add 报错 remote origin already exists,先删掉再加:

bash 复制代码
git remote rm origin
git remote add origin git@gitee.com:用户名/仓库名.git

7.标签管理

发版本的时候用,比如给固件打个 v1.0.0

bash 复制代码
git tag                              # 查看所有标签
git tag v1.0.0                       # 打轻量标签
git tag -a v1.0.0 -m "第一个正式版"    # 打附注标签(推荐,带说明和时间)
git tag -a v1.0.0 a1b2c3d            # 给历史某次提交补打标签
git push origin v1.0.0               # 推送单个标签
git push origin --tags               # 推送所有标签
git tag -d v1.0.0                    # 删除本地标签
git push origin :refs/tags/v1.0.0    # 删除远程标签

8.忽略文件(.gitignore)

编译产生的中间文件、IDE配置、密钥文件等不应该提交到仓库。在项目根目录新建 .gitignore 文件:

bash 复制代码
# 编译输出
*.o
*.obj
*.hex
*.bin
*.map
*.lst
Objects/
Listings/
build/
Debug/
Release/

# Keil / IAR 用户配置文件
*.uvguix.*
*.uvoptx
*.dep
*.crf
*.d
settings/

# IDE配置
.vscode/
.idea/

# 系统文件
Thumbs.db
.DS_Store

# 敏感信息
*.key
config_local.h

# 例外:即使忽略了*.bin,这个文件也要提交
!bootloader.bin

需要注意的是.gitignore 只对还没被跟踪的文件生效 。如果某个文件已经提交过,再加进 .gitignore 是没用的,需要先把它从版本控制中移除:

bash 复制代码
git rm --cached 文件名        # 从仓库移除,但保留本地文件
git rm -r --cached 目录名/    # 移除整个目录

然后重新commit即可。

9.常用命令速查表

命令 作用
git init 初始化本地仓库
git clone <url> 克隆远程仓库
git status 查看当前状态
git add . 添加所有改动到暂存区
git commit -m "说明" 提交到本地仓库
git push 推送到远程
git pull 拉取并合并远程更新
git fetch 只拉取,不合并
git log --oneline --graph 图形化查看提交历史
git diff 查看改动内容
git branch 查看分支
git checkout -b <name> 创建并切换分支
git merge <name> 合并分支
git reset --hard <id> 回退版本(危险)
git revert <id> 反做某次提交
git reflog 查看所有操作记录(后悔药)
git stash / git stash pop 暂存/恢复工作现场
git tag -a v1.0 -m "说明" 打标签
git rm --cached <file> 从版本控制中移除但保留文件

三、TortoiseGit的安装与配置

1.关于TortoiseGit

TortoiseGit(小乌龟)是Windows下的Git图形化客户端,它把Git命令封装成了资源管理器右键菜单,并且会在文件图标上叠加状态标记,一眼就能看出哪些文件改动了。

需要注意的是 :TortoiseGit只是一个界面外壳,它本身不包含Git,必须先安装Git(见第一章)才能使用。

2.下载与安装

官网:tortoisegit.org/download/

需要下载两个文件:

  • 主程序TortoiseGit-2.x.x.x-64bit.msi
  • 中文语言包TortoiseGit-LanguagePack-2.x.x.x-64bit-zh_CN.msi(页面下方 Language Packs 区域,找 Chinese, simplified

先安装主程序,一路 Next,其中有一步会让选择SSH客户端:

  • TortoiseGitPlink(默认) :TortoiseGit自带的PuTTY方案,密钥格式为 .ppk,需要额外转换;
  • OpenSSH, Git default SSH Client(推荐) :直接复用第一章配置好的 id_rsa 密钥,不用做任何转换

这一步很关键。如果第一章已经用 ssh-keygen 生成过密钥并配好了公钥,这里务必选 OpenSSH,可以直接省掉后面PuTTYgen转换密钥的所有麻烦。若选了默认的TortoiseGitPlink,请看本节第4小节。

其余步骤保持默认,点击 Install 完成安装。

再双击安装中文语言包,一路 Next 即可,主要中文语言包版本号要一致。

3.首次配置

安装完成后会自动弹出配置向导(若没弹出,可在桌面右键 → TortoiseGitSettings):

(1)设置语言

General 页面的 Language 下拉框选择"中文(简体)",点击"应用"。

(2)配置用户名和邮箱

进入 Git 页面,填写 NameEmail。这里实际写入的就是 .gitconfig,和命令行的 git config --global user.name 是一回事,如果第一章已经配过,这里会自动显示,无需重复填写

(3)确认Git.exe路径

General 页面下方有 Git.exe Path,正常会自动识别到 C:\Program Files\Git\bin。若提示找不到,手动指定到Git安装目录下的 bin 文件夹。

(4)确认SSH客户端

网络(Network) 页面的 SSH客户端 一栏:

  • 用OpenSSH方案 → 填 C:\Program Files\Git\usr\bin\ssh.exe
  • 用PuTTY方案 → 填 C:\Program Files\TortoiseGit\bin\TortoiseGitPlink.exe

4.(可选)使用PuTTY方案时的密钥转换

如果安装时选了默认的 TortoiseGitPlink,那么它不认识 id_rsa,需要转成 .ppk 格式:

  1. 开始菜单打开 PuTTYgen(随TortoiseGit一起安装);
  2. 点击 Load ,文件类型选 All Files (*.*),选择 C:\Users\你的用户名\.ssh\id_rsa
  3. 提示导入成功后,点击 Save private key ,忽略"不设密码"的警告,保存为 id_rsa.ppk
  4. 打开 Pageant (同样随TortoiseGit安装,运行后在任务栏托盘),右键托盘图标 → Add Key,加载刚才的 .ppk 文件。

也可以直接用PuTTYgen新生成一对密钥,把上方文本框里的公钥内容复制到Gitee,私钥保存为 .ppk

再强调一次:图省事就在安装时选OpenSSH,这一整节都可以跳过。

四、TortoiseGit的详细使用

安装完成后,在任意文件夹空白处右键(Win11需点"显示更多选项"),就能看到TortoiseGit的菜单项。

1.克隆远程仓库

  1. 在想要存放代码的文件夹里空白处右键 → Git 克隆(Clone)
  2. URL 填远程仓库地址(从Gitee复制的SSH地址);
  3. 目录 是本地存放路径,会自动根据仓库名填好;
  4. 如果用PuTTY方案,勾选 加载 Putty 密钥 并选择 .ppk 文件;OpenSSH方案则不用管;
  5. 点击"确定",等待克隆完成。

2.在本地创建仓库

  1. 新建一个文件夹,进去空白处右键 → 在这里创建版本库(Create repository here)
  2. 弹窗中的 制作纯版本库 不要勾选(勾了就是bare仓库,没有工作区);
  3. 点击"确定",文件夹里会生成 .git 隐藏目录。

3.看懂文件图标

TortoiseGit会在文件/文件夹图标左下角叠加小图标表示状态:

图标 含义
绿色对勾 ✔ 已提交,本地与版本库一致,没有改动
红色感叹号 ❗ 已修改,尚未提交
蓝色加号 ➕ 新添加到暂存区,等待提交
灰色减号 ➖ 被删除的文件
黄色问号 ❓ 未纳入版本控制(Untracked)
黄色叹号(冲突图标) 存在冲突,需要手动解决

如果图标不显示,一般是图标缓存问题。可以重启资源管理器(任务管理器 → 找到"Windows 资源管理器" → 重新启动),或在 TortoiseGit设置 → 图标覆盖 里检查配置。

4.提交代码(add + commit + push)

(1)提交到本地仓库 修改或新增文件后,在项目文件夹空白处右键 → Git 提交(Commit) -> "master"

  1. 上方"日志信息"框填写本次提交说明;
  2. 下方文件列表勾选要提交的文件(未跟踪的文件默认不勾,需手动勾上);
  3. 点击"提交"。

也可以先右键单个文件 → TortoiseGit添加(Add) ,把文件加入暂存区(相当于 git add),再执行提交。不过在提交窗口里直接勾选更方便,一步到位。

(2)推送到远程仓库 提交完成后的窗口里直接有"推送"按钮,点它即可;也可以右键 → TortoiseGit推送(Push)

  1. 本地分支远程分支 通常保持一致(都是master或main);
  2. 远端origin
  3. 点击"确定"。 推送成功后刷新Gitee仓库页面,就能看到新提交的文件了。

5.更新代码(pull / fetch)

多人协作时,每天开工第一件事就是拉取最新代码 。 右键 → TortoiseGit拉取(Pull) → 确定。 如果只想看看远程有什么更新、暂时不合并到本地,用 获取(Fetch) ,对应 git fetch

习惯:每次开始写代码前先Pull一次,写完提交前再Pull一次,能避免大部分冲突。

6.查看提交日志

右键 → TortoiseGit显示日志(Show log)。 日志窗口的信息很全:

  • 上半部分是提交列表(时间、作者、提交说明、commit id);
  • 左下是本次提交涉及的文件;
  • 右下是该文件的具体改动内容;
  • 双击某个文件可以打开对比窗口,红绿高亮显示每一行的增删。

7.版本回滚

(1)撤销未提交的修改

右键 → TortoiseGit还原(Revert) ,勾选要还原的文件 → 确定。相当于 git checkout -- 文件名

(2)回退到历史版本

  1. 右键 → TortoiseGit显示日志
  2. 在列表中找到想回到的那个版本,右键该条目重置 "master" 到这个版本(Reset "master" to this)
  3. 弹窗中有三种模式,对应命令行的三种reset:
    • Soft:只移动分支指针,改动保留在暂存区;
    • Mixed:移动指针,改动保留在工作区(默认,较常用);
    • Hard :彻底丢弃之后的所有改动(危险,操作前确认);
  4. 选择模式后点击"确定"。 回滚后再去本地文件夹查看,之前提交的文件已经恢复到对应版本的状态了。

万一Hard回滚过头,别慌。用命令行 git reflog 找到之前的commit id,再reset回去就行。

8.分支的创建、切换与合并

(1)创建分支 右键 → TortoiseGit创建分支(Create Branch)

  1. 分支 填新分支名,例如 dev
  2. 基于 选择从哪个版本创建,默认是当前HEAD;
  3. 勾选 切换到新分支 可以创建后直接切过去;
  4. 确定。

(2)切换分支

右键 → TortoiseGit切换/检出(Switch/Checkout),在下拉框中选择目标分支 → 确定。

切换后,文件夹里的文件内容会立刻变成该分支的版本。

(3)合并分支

假设要把 dev 合并到 master

  1. 先切换到 master 分支;
  2. 右键 → TortoiseGit合并(Merge)
  3. 来源 选择 分支dev
  4. 确定。

合并后如果没有冲突,直接推送即可;有冲突则参考下一节。

9.解决冲突(重点)

冲突产生的原因 :两个人(或同一个人在两台电脑上)修改了同一个文件的同一行 ,Git无法判断该保留谁的,就会报冲突。 (1)复现一下冲突场景 为了演示,可以这样制造一次冲突:

  1. 把同一个远程仓库克隆到两个不同的本地目录,比如 repoArepoB
  2. repoA 中修改 测试文件01.txt 的第一行,提交并推送;
  3. repoB 中也修改 测试文件01.txt 的第一行(内容不同),提交后推送;
  4. 这时 repoB 会推送失败,提示rejected non-fast-forward的错误窗口,提示需要先拉取。 (2)拉取后出现冲突repoB 执行 Pull,会提示合并冲突,冲突文件的图标变成黄色感叹号。 同时目录下会多出几个临时文件:
  • 文件名.BASE.txt:两边共同的祖先版本;
  • 文件名.LOCAL.txt:本地版本;
  • 文件名.REMOTE.txt:远程版本。 打开冲突文件本身,会看到Git插入的冲突标记:
markdown 复制代码
<<<<<<< HEAD
这是我本地写的内容
=======
这是别人推送到远程的内容
>>>>>>> a1b2c3d4

(3)解决冲突 不要慌,右键该文件 → TortoiseGit编辑冲突(Edit conflicts),会打开TortoiseGitMerge三栏对比窗口:

  • 左侧:Theirs(远程/他人的版本)
  • 右侧:Mine(本地/我的版本)
  • 下方:Merged(最终合并结果) 在冲突处右键,选择"使用这个文本块"(Use this text block),可以选择用他人的、用自己的,或两者都保留;也可以直接在下方合并结果区手动编辑成想要的样子。 (4)标记为已解决 改完保存,右键文件 → TortoiseGit解决(Resolved / Mark as resolved) ,几个 .BASE .LOCAL .REMOTE 临时文件会自动清理。 最后正常执行提交、推送即可。

解决冲突的原则:搞不清对方为什么这么改的时候,先去问一下,别自作主张删掉别人的代码

10.忽略文件

右键需要忽略的文件 → TortoiseGit删除并添加到忽略列表(Delete and add to ignore list),可以选择:

  • 忽略这个文件:只忽略该文件;
  • *忽略 .后缀:忽略所有同类型文件;
  • 作用范围可选"在版本库根目录"或"仅在此目录"。 操作后会自动生成/更新 .gitignore 文件。

也可以直接手动新建、编辑 .gitignore,写法参考本文第二节第8小节。.gitignore 文件本身是需要提交到仓库的,这样团队成员共用一套忽略规则。

11.设置外部比较工具(Beyond Compare)

TortoiseGit自带的TortoiseGitMerge够用,但如果习惯Beyond Compare,可以替换: TortoiseGit设置外部程序差异查看器

  1. 选择 外部程序
  2. 填入(路径按实际安装位置修改): "C:\Program Files\Beyond Compare 4\BCompare.exe" %base %mine
  3. 同理,合并工具 页面填入: "C:\Program Files\Beyond Compare 4\BCompare.exe" %mine %theirs %base %merged

12.其他常用功能

右键菜单项 对应命令 说明
差异比较(Diff) git diff 查看当前文件与上次提交的差异
版本分支图(Revision graph) --- 图形化展示整个分支走向
贮藏更改(Stash changes) git stash 临时保存工作现场
贮藏列表(Stash list) git stash list 查看并恢复贮藏
创建标签(Create Tag) git tag 打版本标签
清理(Clean up) git clean 清除未跟踪的文件
同步(Sync) --- 一个窗口里完成pull/push/fetch
追溯(Blame) git blame 查看每一行代码是谁、什么时候写的

追溯(Blame) 这个功能在排查问题时很好用,能直接定位到某行代码的提交人和提交时间,找相关同事确认改动原因效率很高。

五、常见问题

(1)推送时报 rejected - non-fast-forward

远程有你本地没有的提交。先 Pull 拉取合并(有冲突就解决冲突),再 Push。不要直接用 push -f 强推,那会覆盖别人的提交。

(2)推送时报 Permission denied (publickey)

SSH配置问题。参考第一章第四节第9小节排查:确认远程地址是SSH格式、公钥已正确添加到平台、ssh -T git@gitee.com 能验证通过。

(3)TortoiseGit图标不显示

  • 重启资源管理器;
  • 检查 TortoiseGit设置 → 图标覆盖 → 状态缓存,改为 默认
  • Windows的图标覆盖数量有上限(15个),如果同时装了OneDrive、坚果云等,可能挤占了名额。可在注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers 中把不需要的项重命名(前面加zz),让TortoiseGit排到前面。

(4)提交时中文乱码

TortoiseGit设置 → Git → 编辑本地.git/config,添加:

ini 复制代码
[gui]
    encoding = utf-8
[i18n]
    commitencoding = utf-8
    logoutputencoding = utf-8

(5)克隆速度极慢(GitHub)

  • 优先使用Gitee,或用Gitee的"导入仓库"功能中转;

  • 配置代理(假设本地代理端口7890):

    bash 复制代码
    git config --global http.proxy http://127.0.0.1:7890
    git config --global https.proxy http://127.0.0.1:7890
    # 取消代理
    git config --global --unset http.proxy
    git config --global --unset https.proxy

(6)误删了分支/提交

命令行执行 git reflog,找到对应的commit id,然后 git reset --hard <id>git branch <分支名> <id> 恢复。

总结

几点个人经验:

  • git statusgit log 多敲,不确定状态时先看清楚再操作;
  • reset --hard 之前先想三秒 ,实在回滚错了就用 git reflog 找回来;
  • 分支不要吝啬,新功能、试验性改动都开新分支,主分支保持随时可用;
  • 提交说明认真写,三个月后回来看日志,你会感谢当时的自己;
  • 图形界面提效,但命令行必须能看懂,因为出问题时的解决方案基本都是命令行的。

教程中涉及的软件均可从官网下载:Git官网TortoiseGit官网阿里镜像(Git)

参考文章: TortoiseGit-使用教程(图文详细版) Git教程 SSH keys配置 Git详细安装教程 gitee上传代码(生成SSH公钥)

相关推荐
用户69371750013842 小时前
深夜炸场!DeepSeek 没发新模型,却重构了整个 Agent 生态
前端·后端·github
fthux2 小时前
装闭 RenoPit 源码解析(08):多模态AI调用、重试与文本降级
人工智能·ai·开源·github·open source·renopit
笨鸟先飞,勤能补拙2 小时前
AI Agent应用领域深度解析:从概念到落地的全维度审视
大数据·人工智能·python·物联网·安全·网络安全·github
JenKinJia3 小时前
Pycharm中增加远程服务器解释器无法连接的问题
服务器·pycharm·github
xiezhr4 小时前
DeepSeek 不能识图?装个开源 Skill,纯文本模型也能"睁眼"了
github·aigc·deepseek
dong_junshuai18 小时前
每天一个开源项目#68 Needle:14MB 工具调用小模型装进口袋设备
程序员·开源·github
向上的车轮21 小时前
GitHub Actions 自动化运维实战:Rust 全栈项目 CI/CD 至华为云
运维·自动化·github
MicrosoftReactor1 天前
技术速递|GitHub Copilot App 中的堆叠会话与拉取请求
ai·github·copilot·agent