Git使用: 命令以及对应的VSCode可视化操作
Git基础使用 命令以及对应的VScode可视化操作
基础概念
1. 工作区、本地仓库、暂存区、远程仓库
先弄清楚这几个概念的区别:
- 工作区:就是你在电脑里能看到的目录。
- 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。存放当前的等待提交的更改。
- 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。存放所有历史版本。
- 远程仓库:github、gitee等,用于托管。
这四个概念的交互操作如下图:
基础使用
首先,强烈建议在VSCode中安装git graph插件。
1. 仓库初始化:
git init

2. 添加文件进行管理/暂存:
git add . # 添加所有文件

3. 本地提交:
首次提交需要配置用户名邮箱
git config --global user.name "name"
git config --global user.email "mail@mail.com"
git commit -m "Initial commit"

4. 添加远程仓库:
git remote add github https://github.com/XXX/XXX.git

5. 远程推送:
将本地内容推送到远程仓库
git push -u github main

6. 远程拉取
将远程仓库的内容拉取到本地
git pull origin master
可视化操作:下面两个地方都可以进行pull操作
补充:使用.gitignore忽略项目中不想托管的内容
- 新建.gitignore文件
- 添加需要忽略的内容,如 *.pth
- 下面是一份常用的.gitignore(python深度学习项目)
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
*.egg-info/
.installed.cfg
*.egg
# PyInstaller
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# PyCharm
.idea/
*.iml
*.iws
*.ipr
# VS Code
.vscode/
# Logs and databases
*.log
*.sqlite3
# Deep learning model weights and datasets
*.h5
*.ckpt
*.pth
*.pt
*.pkl
*.npy
*.npz
# Temporary files
*.tmp
*.temp
*.bak
*.swp
*.swo
*.orig
*.DS_Store
# System files
Thumbs.db
.DS_Store
补充:移除所有 Git 历史和配置
rm -rf .git
补充:Git菜单项功能与对应命令
| 父菜单项 | 子菜单项 | Git 命令 | 功能/描述 |
|---|---|---|---|
| View & Sort > | Sort Commits By… | (UI 功能) | 更改提交历史的排序方式(按日期、作者等)。 |
| Commit > | Commit Staged | git commit -m "<message>" |
将暂存区的更改记录到版本历史中,并附带提交信息。 |
| Commit All | git commit -a -m "<message>" 或 git add . && git commit -m "<message>" |
暂存所有已跟踪文件的修改和删除,然后进行提交。 | |
| Commit All (Include Untracked) | git add . && git commit -m "<message>" |
暂存工作目录中的所有更改(包括新文件),然后进行提交。 | |
| Amend Previous Commit | git commit --amend |
修改最后一次提交(可修改提交信息、添加/移除文件)。 | |
| Commit Staged (Signed) | git commit -S -m "<message>" |
创建一个 GPG 签名的提交(需要配置 GPG 密钥)。 | |
| Changes > | Stage Changes / Add | git add <file> |
将选定的文件更改添加到暂存区。 |
| Stage All Changes / Add All | git add . 或 git add -A |
将工作目录中所有文件的更改(新增、修改、删除)添加到暂存区。 | |
| Unstage Changes / Reset | git reset HEAD <file> 或 git restore --staged <file> |
将选定的已暂存文件移出暂存区,放回工作目录状态。 | |
| Unstage All Changes / Reset All | git reset HEAD 或 git restore --staged . |
将所有已暂存的文件移出暂存区。 | |
| Discard Changes / Checkout Changes | git checkout -- <file> 或 git restore <file> |
撤销选定工作目录文件的修改,恢复到上次提交或暂存的状态。 | |
| Discard All Changes | git checkout . / git restore . / git clean -fd (危险) |
撤销工作目录中所有已跟踪文件的修改;可能删除未跟踪文件(需谨慎操作)。 | |
| Open Changes / Show Diff | git diff <file> / (内部 Diff 工具) |
显示选定文件与上次提交或暂存状态之间的差异。 | |
| Pull, Push > | Pull | git pull <remote> <branch> |
从指定的远程仓库和分支拉取最新更改并合并到当前本地分支。 |
| Push | git push <remote> <branch> |
将本地已提交的更改推送到指定的远程仓库和分支。 | |
| Push with Tags | git push --follow-tags 或 git push --tags |
在推送提交的同时,推送本地存在的(或相关的)标签。 | |
| Force Push… | git push --force-with-lease <remote> <branch> 或 git push --force ... (危险) |
强制覆盖远程分支的历史记录(警告: 通常不推荐,仅在确知后果时使用)。 | |
| Synchronize Changes / Sync | 常为 git pull --rebase (或 git pull) + git push 的组合 |
先从远程更新本地分支,然后将本地的新提交推送到远程,保持同步。 | |
| Set Upstream / Track Remote Branch | git push -u <remote> <branch> 或 git branch --set-upstream-to=... |
设置当前本地分支跟踪一个指定的远程分支,简化后续的 pull/push 操作。 | |
| Branch > | Merge | git merge <branch-to-merge> |
将指定分支的更改合并入当前签出的分支。 |
| Create Branch… | git branch <new-name> 或 git checkout -b <new-name> |
创建一个新的本地分支(后者会同时切换到新分支)。 | |
| Create Branch From… | git checkout -b <new-name> <start-point> |
从指定的提交、标签或其他分支创建新分支并切换过去。 | |
| Checkout / Switch Branch… | git checkout <branch-name> |
切换当前工作目录到指定的已存在分支。 | |
| Rename Branch… | git branch -m <new-name> |
重命名当前所在的本地分支。 | |
| Delete Branch… | git branch -d <name> (安全) 或 git branch -D <name> (强制) |
删除指定的本地分支(-d 会检查是否已合并,-D 强制删除)。 | |
| Rebase Current onto Branch… | git rebase <base-branch> |
将当前分支的提交“变基”到指定的基础分支之上,使历史线性化。 | |
| Publish Branch / Push Branch | git push -u <remote> <branch-name> |
将本地新创建的分支推送到远程仓库,并设置跟踪关系。 | |
| Remote > | Add Remote… | git remote add <name> <url> |
添加一个新的远程仓库别名和地址。 |
| Remove Remote… | git remote remove <name> |
删除一个已存在的远程仓库连接。 | |
| Tags > | Create Tag… | git tag <name> (轻量) 或 git tag -a <name> -m "<message>" (附注) |
在当前 HEAD 或指定提交上创建一个标签(轻量标签仅是指针,附注标签包含额外信息)。 |
| Delete Tag… | git tag -d <name> (本地) / git push --delete <remote> <name> (远程) |
删除一个本地标签或请求远程仓库删除一个标签。 |
说明:
- (UI 功能) 或 (编辑器功能) 表示该菜单项主要控制图形界面本身或调用外部程序,不直接执行核心的 Git 操作命令。
<...>中的内容是占位符,实际使用时需要替换为具体的文件名、分支名、远程仓库名、提交信息等。- 某些操作可能有多种对应的 Git 命令或参数组合,表格中列出了常见的形式。
- 标记为 (危险) 的操作需要特别小心,可能会丢失数据或破坏仓库历史,务必在理解其影响后再使用。
克隆别人的项目并且上传到自己的仓库
首先复制希望克隆的项目URL地址。
1. 点击克隆仓库,粘贴远程仓库地址

2. 选择本地仓库地址

3. 将克隆项目上传到自己的仓库
- 首先点击下图中的
Remove Remote移除之前的远程仓库; - 点击
Add Remote添加自己的远程仓库,这和前面4. 添加远程仓库相同
检查远程仓库,确认地址:
git remote -v
- 在对项目进行修改之后点击就可以按照之前的操作顺序上传到自己的仓库了。
- PS:这样做的目的是保留别人仓库的各个版本修改信息。如果不需要,直接下载别人的项目压缩包进行git的初始化是更加方便的操作。
Github个人令牌的使用–克隆自己的私有仓库(Cursor登录GitHub举例)
1. 创建个人令牌
- 路径:点击右上角的头像,选择 “Settings”,在左侧菜单栏底部选择 “Developer settings”,在左侧菜单栏,选择 “Personal access tokens” -> “Tokens (classic)”。 直达链接
- 点击 “Generate new token” (或者 “Generate new token (classic)”)。
- Note (名称): 描述性的名字,例如 “Cursor Access”。
- Expiration (有效期): 自己用选无限期就行了(为了安全,官方不建议选择 “No expiration”,甚至不建议classic tokens而是Fine-grained tokens)。
- Select scopes (选择范围): 设置此token的各类权限,懒得想就直接全选。如果你使用 Fine-grained tokens,还需要选择对应的读写权限。
- 点击页面底部的 “Generate token”。
- 重要: GitHub 只会显示一次key,尽快复制保存。
2. 在VScode/Cursor中登录GitHub
- 首先点击
克隆仓库,然后点击从GitHub克隆
- 会提示登录,这里我们使用PAT方式,所以点击取消


- 接下来左下角会提示是否使用PAT方式认证,点击
yes
- 接下来提示前往GitHub创建令牌,我们刚刚已经创建好了,这里点击
continue之后直接返回cursor就好
- 输入刚刚新建的PAT key即成功登录

3. 克隆自己的私有仓库
首先点击克隆仓库,然后点击从GitHub克隆,选择仓库或者输入搜索。然后选择本地路径,就可以克隆了。
VSCode中使用Git管理代码版本
1. Git中的版本管理
通过一个head指针指向当前版本:
2. 回退到某个版本:git reset操作
git reset的作用是修改HEAD的位置,即将HEAD指向的位置改变为之前存在的某个版本,具体步骤如下:
2.1 使用git log查看版本号
如图:可视化操作在左侧、终端操作在右侧
复制需要回退的版本号
2.2 使用 git reset --hard 目标版本号回退到目标版本并舍弃后续修改
命令行操作直接在命令行执行上述命令即可
可视化操作如下:
根据需要进行选择:
补充总结各个参数的含义以及使用场景:
| 参数 | 含义 | 工作目录 (Working Directory) | 暂存区 (Staging Area / Index) | HEAD 指针 (当前分支) | 典型使用场景 |
|---|---|---|---|---|---|
--soft |
将 HEAD 指针和当前分支移动到指定提交。不修改工作目录和暂存区。 | 不变 | 不变 | 移动到指定提交 | - 想撤销最近的几个提交,但保留所有更改(文件内容和暂存状态),以便重新组织或合并为单个提交。 - 在提交后发现提交信息写错了,想修改提交信息。 |
--mixed |
(默认参数) 将 HEAD 指针和当前分支移动到指定提交。重置暂存区以匹配指定提交,但不修改工作目录。所有更改将变为未暂存状态。 | 不变 | 重置 | 移动到指定提交 | - 想撤销最近的几个提交,并将这些提交引入的更改退回到未暂存状态,以便重新审查、修改或选择性暂存。 - 在 git add 之后,想撤销暂存,但保留工作目录中的修改。 |
--hard |
将 HEAD 指针和当前分支移动到指定提交。彻底重置工作目录和暂存区以匹配指定提交。会丢失指定提交之后的所有本地更改和未提交内容。 | 重置 | 重置 | 移动到指定提交 | - 想彻底丢弃最近的几个提交,并将仓库完全恢复到某个历史提交的状态。 - 放弃所有未提交的更改和暂存区的更改,将工作目录恢复到最近一次提交的状态( git reset --hard HEAD)。警告:此操作是破坏性的,会丢失数据,请谨慎使用。 |
2.3 使用 git push -f强制推送到远程(强制覆盖)
在回退版本之后,如果用“git push”会报错,因为我们本地库HEAD指向的版本比远程库的要旧,因此需要使用强制推送,使得当前版本之后的所有版本全部消失。
命令行操作在命令行执行上述命令即可。
VSCode可视化操作:
注意:强制推送需要先在vscode设置中搜索git push找到git->Git:Allow Force Push进行勾选,如下图所示:
然后按下图所示,找到Push(Force)菜单项
2.4 git reset结果
回退到指定版本,后续版本全部消失。
3. 撤销某个版本的修改:git revert 操作
git revert 的作用是创建一个新的提交,这个新提交的内容是撤销你指定 那个提交所做的所有更改。同时会保留指定版本后续版本的内容。
具体步骤如下:
3.1 使用git log查看版本号
同上。
3.2 使用git revert -n 版本号撤销指定版本的修改
可视化操作:
同方法一中一样,目标版本上右键菜单中找到revert即可:
若提示revert失败则是产生了冲突,手动选择保留的版本即可。
3.3 使用 git push推送到远程
处理完冲突,由于是新建了一次提交,因此使用基础使用中的普通推送即可成功推送到远程仓库,无需强制执行。
3.4 git revert执行结果
回退到了目标版本,并且保留了后续版本的修改。
VSCode中使用Git进行分支管理(待更新)
1. Git中的分支查看
git branch 列出本地已经存在的分支,当前分支会用*标记
git branch -r 查看远程版本库的分支列表
git branch -a 查看所有分支列表(包括本地和远程,remotes/开头的表示远程分支)
git branch -v 查看一个分支的最后一次提交
git branch --merged 查看哪些分支已经合并到当前分支
git branch --no-merged 查看所有未合并工作的分支
2. Git中的单分支操作
git branch 新分支名称 :创建新分支
git checkout 分支名称 :切换分支
git checkout -b 新分支名称 :创建并切换到新分支
git branch -d 分支名称 :删除分支(必须切换到其他分支才能删除,使用D强制删除)
3. Git中的多分支合并
- 一般是在主分支合并其他分支,所以先切换到主分支:
git checkout master - 为保证代码最新,先从远程仓库拉取代码:
git pull origin master - 然后执行分支合并:
git merge 分支名称 - 如果出现冲突可以取消合并:
git merge --abort: - 合并成功则推送到远程仓库:
git push origin master
4. Git分支管理VSCode实战:基于指定版本开发新分支
4.1使用git log查看版本号
同上。
4.2 使用git checkout -b 新分支名 目标版本号在指定版本上创建并切换新分支
命令:git checkout -b 新分支名 目标版本号:创建并切换到基于该历史版本创建的新分支上。
可视化操作:
如图,在指定版本上右键菜单找到对应操作
然后输入分支名即可执行创建新分支的操作,同时会自动切换到当前分支。
4.3 分支合并(等待更新)
更多推荐


所有评论(0)