news 2026/5/23 5:13:39

Git常用命令和GUI工具

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Git常用命令和GUI工具


Workspace:工作区
程序员进行开发改动的地方,是你当前看到的,也是最新的。
平常我们开发就是拷贝远程仓库中的一个分支,基于该分支进行开发。在开发过程中就是对工作区的操作。

Index / Stage:暂存区
.git目录下的index文件, 暂存区会记录git add添加文件的相关信息(文件名、大小、timestamp…),不保存文件实体, 通过id指向每个文件实体。可以使用git status查看暂存区的状态。暂存区标记了你当前工作区中,哪些内容是被git管理的。
当你完成某个需求或功能后需要提交到远程仓库,那么第一步就是通过git add先提交到暂存区,被git管理。

Repository:仓库区(或本地仓库)
保存了对象被提交 过的各个版本,比起工作区和暂存区的内容,它要更旧一些
git commit后同步index的目录树到本地仓库,方便从下一步通过git push同步本地仓库与远程仓库的同步

Remote:远程仓库
远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的

=================================================================

配置git

#git用户名gitconfig--globaluser.name"your name"#邮箱gitconfig--globaluser.email"email@example.com"#显示颜色gitconfig--globalcolor.uitrue

初始化

mkdirprojectcdprojectgitinit#创建全新的仓库,在当前目录初始化创建仓库gitclone'https://github.com/kwonganding/KWebNote.git'# 克隆远程仓库

添加文件,提交,查看当前仓库状态

gitaddmy.java#git add -f my.java f为强制添加gitadd<dir>添加指定目录到暂存区,包括子目录gitadd<file>添加指定文件到暂存区gitadd.添加当前目录所有文件到暂存区gitrm[file1][file2]... 删除工作区文件,并且将这次删除放入暂存区gitmv[file-original][file-renamed]改名文件,并且将这个改名放入暂存区gitcommit-m"提交备注"gitcommit<file>-m<message>提交暂存区的指定文件到本地仓库gitcommit--amend-m<message>使用一次新的commit,替代上一次的提交gitstatus

对比文件改动内容,查看git日志,回退版本到第N个版本前,回退到指定版本

gitdiffmy.javagitloggitreset —soft<commit>#只改变提交点,暂存区和工作目录的内容都不改变gitreset —mixed<commit># 改变提交点,同时改变暂存区的内容gitreset —hard<commit>#暂存区、工作区的内容都会被修改到与提交点完全一致的状态gitreset--hardHEAD# 让工作区回到上次提交时的状态gitreset--hardHEAD~Ngitreset--harde475afc93c209a690c39c13a46716e8fa000c366 (此值不必写全,只要能让git知道是哪个把那本就行,一般写5-6位即可)

revert与reset的区别

git revert用一个新提交来消除一个历史提交所做的任何修改
git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit
日后继续merge以前的老版本时有区别。因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,减少冲突。但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入,产生很多冲突
git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容

撤销修改,撤销暂存区的修改

gitcheckout -- my.java#撤销到最近一次git add 或 git commit之前的状态gitreset HEAD my.java#撤销暂存区的修改,git commit之前

删除文件

gitrmmy.java#若误删,需要git checkout --文件名

查看远程仓库,关联远程仓库

gitremote-vgitremoteaddorigin git@github.com:username/xxx.git

创建分支、切换分支


展示分支,切换分支,创建分支,删除分支这四种操作

gitbranch 分支名#新建一个分支,但依然停留在当前分支gitcheckout 分支名# 新版本 git switch 分支名 切换到指定分支,并更新工作区

创建分支并切换

gitcheckout-b分支名# 新版本 git switch -c 分支名 新建一个分支,并切换到该分支gitbranch--track<branch><remote-branch># 新建一个分支,与指定的远程分支建立追踪关系

合并分支

gitfetch<remote># merge之前先拉一下远程仓库最新代码gitmerge 其他分支名#合并某分支到当前分支,若存在冲突会提示手动修改后在提交(默认为fast forward模式)gitmerge --no-ff-m"提交备注"其他分支名#禁用fast forward模式gitlog--graph--pretty=oneline --abbrev-commit 命令可以查看分支合并图

查看所有分支,删除分支

gitbranch#查看分支gitbranch-a# 远程+本地 远程分支会以红色标出,当前分支前面会标一个*号gitbranch-r#列出所有远程分支gitbranch-d分支名#删除分支gitbranch-D分支名#强行删除分支gitpush origin--delete<branch-name>#删除远程分支

rebase与merge的区别

两个分支,test和master,提交如下:
D—E test
/
A—B—C—F master

在master执行git merge test,然后会得到如下结果:
merge操作会生成一个新的节点,之前的提交分开显示,如果你想保留完整的历史记录,并且想要避免重写commit history的风险,你应该选择使用git merge
D--------E
/
A—B—C—F----G test, master

在master执行git rebase test,然后得到如下结果:
rebase操作不会生成新的节点,是将两个分支融合成一个线性的提交,如果你想要一个干净的,没有merge commit的线性历史树,那么你应该选择git rebase
A—B—D—E—C’—F’ test, master

推送到远程库,推送到远程库分支

gitpush-uorigin master# 第一次推送到master分支gitpush<remote><branch>#上传本地指定分支到远程仓库gitpush<remote>--force#强行推送当前分支到远程仓库,即使有冲突gitpush<remote>--all#推送所有分支到远程仓库gitpush origin 分支名#推送到指定分支

将本地分支与远程分支关联

gitbranch --set-upstream-to 分支名 origin/分支名

关联GitHub的远程库,推送Github

gitremoteaddgithub git@github.com:username/xxxx.gitgitpush github master

关联Gitee的远程库,推送Gitee

gitremoteaddgitee git@gitee.com:username/xxxx.gitgitpush gitee master

把本地未push的分叉提交历史整理成直线

gitrebash# 在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。

克隆、克隆指定分支代码

gitclone https://github.com/username/xxxx.git# 或 git clone git@github.com:username/xxxx.gitgitclone-b分支名 https://github.com/username/xxxx.git

抓取代码

gitpull

=========================================================================

保存工作空间,查看保存的工作空间,从保存的工作空间恢复,删除保存的工作空间

gitstashgitstash listgitstash applygitstash apply stash@{n}# 若存在多个保存的工作空间(n为序号0开始)gitstash dropgitstash drop stash@{n}#若存在多个保存的工作空间()gitstash pop#从保存的工作空间恢复兵删除保存的空间gitstash pop stash@{n}#若存在多个保存的工作空间(n为序号0开始)

将其他分支上的提交应用到当前分支

gitcherry-pick commit的编号

============================================================

打标签

gittag v1.0 commit的id#(不加则为之后的commit添加标签)gittag-av1.0-m"提交备注"commit的id#(不加则为之后的commit添加标签)

查看所有标签

gittag

查看标签信息

gitshow v1.0

删除本地标签

gittag-dv0.1

删除远程标签

gitpush origin :refs/tags/v1.0

推送某个标签到远程

gitpush origin v1.0

推送全部尚未推送的标签

gitpush origin--tags

=================================================

查看.gitignore文件中哪条规则写错了

gitcheck-ignore-v文件名

设置命令别名

gitconfig--globalalias.st status# git status => git stgitconfig--globalalias.unstage'reset HEAD'# git reset HEAD file => git unstagegitconfig--globalalias.lg"log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"# git log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit => git lg

==================================================================

Git的GUI工具

TortoiseGit

小乌龟,SVN时代就很流行的代码管理GUI利器,Git是集成到操作系统里的,直接右键文件夹就可以进行Git操作了。
🚫只有Windows版本,支持中文,需要单独下载安装中文语言包。
✔️开源,免费,与文件管理器的良好集成。
✔️内置冲突对比解决工具。



Sourcetree

SourceTree是老牌的Git GUI管理工具了,也号称是最好用的Git GUI工具。

✔️适用于 Windows 和 Mac 系统,内置中文版,自动识别语言。
✔️免费、功能强大,使用简单。
✔️功能丰富,基本操作和高级操作都设计得非常流畅,适合初学者上手,支持Git Flow。
🚫无冲突对比工具,支持配置第三方组件。


GitHub Desktop

Github官方出品的Git管理工具。

GitKraken
GitKraken是一个跨平台GUI Git客户端,有免费版,专业版和企业版,这些版本启用了不同的功能。

github中克隆一个Python项目到本地

工具

命令

gitclone https://github.com/showmecodett/Langchain-Chatchat.gitcdLangchain-Chatchat# 切换分支gitcheckout-bv0.2.9 tags/v0.2.9# 创建虚拟环境python3.10-mvenv venv# 激活虚拟环境sourcevenv/bin/activate# 升级pip和setuptoolspython3.10-mpipinstall--upgradepip python3.10-mpipinstall00upgrade setuptools# 安装依赖pipinstall-rrequirements_fork.txt# 测试Chroma向量数据库# https://github.com/chroma-core/chroma/tree/0.4.13python3.10 tests/test_chromadb.py# 下载m3e-base,存放在项目的根目录# https://huggingface.co/moka-ai/m3e-base# $ 项目根目录/_models/moka-ai/m3e-base# 测试m3e-basepython3.10 tests/test_embeddings.py# 如果程序最后输出success,则安装成功# 复制配置文件,将config_example.py等复制到config.pypython3.10 copy_config_example.py# 填写api key等信息,填写.env文件cp.env.template.envvi.env# 测试zhipu apipython3.10 tests/test/fastchat.py# 重置本地知识库python3.10 init_database.py --recreate-vs# 启动服务python3.10 startup.py-a

如何提交PR到Github上的开源项目

  • 上游仓库,github上原有的仓库
  • 远程仓库,自己github账号上fork上游仓库的仓库
  • 本地仓库,从自己github账号的远程仓库clone到自己的本地



什么样的PR是不会被接收的

  1. 非紧急的bug修复的PR并直接提交到master的PR
  2. 仅仅修改Readme.md和配置文件的
  3. 跟项目组已经开发的内容冲突的(dev版本),将可能被拒绝

所有的PR需要以dev分支为基准,master分支仅仅用来发行于紧急bug修复

创建分支

# 确认是否存在上游的仓库的dev分支(因为要求基于dev分支进行开发)gitbranch-r# 如果列表中没有看到dev分支,需要添加该分支的上游upstream仓库,使用如下命令添加上有仓库gitremoteaddupstream https://github.com/chatchat-space/Langchain-Chatchat.git# 拉取上游仓库的最新分支信息gitfetch upstream# 检出dev分支gitcheckout dev# 验证当前的分支是否已经是上游仓库分支的最新内容gitlog# 创建功能分支或修复分支gitcheckout-bfeat-chromadb
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 5:12:54

搜索题目:网格中的最短路径

文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目 标题和出处 标题&#xff1a;网格中的最短路径 出处&#xff1a;1293. 网格中的最短路径 难度 6 级 题目描述 要求 给定一个 mn\texttt{m} \times \texttt{n}mn 的矩阵 grid\text…

作者头像 李华
网站建设 2026/5/23 5:12:54

技术人创业失败复盘:我们烧完500万学到的教训

我们曾笃信“技术改变世界”&#xff0c;以为写好代码就拥有一切。作为一名测试架构师&#xff0c;我拉上两个技术伙伴投身创业&#xff0c;整整三年&#xff0c;烧光了五百万&#xff0c;最终却在2023年春天关停了服务器。从专业的测试视角回望&#xff0c;这段失败的经历并非…

作者头像 李华
网站建设 2026/5/23 5:12:53

adb 常用指令

1. 连接设备adb connect 192.168.0.101 2. 断开设备adb disconnect 192.168.0.101 3. 查看连接的设备列表adb devices4. 重启设备adb reboot 5. 关闭服务adb kill-server 6. 开启服务adb start-server 7. 拉取文件或文件夹 到 电脑本地&#xff0c;后面的是…

作者头像 李华
网站建设 2026/5/23 5:10:09

超自动化安全:如何降低人为操作失误风险?

在网络安全领域&#xff0c;有一个令人不安的统计数字&#xff1a;超过60%的数据中心宕机与安全事件&#xff0c;直接或间接源于人为操作失误。误封禁正常IP、漏配一条防火墙策略、在紧张态势下点错一个按钮——这些看似微小的失误&#xff0c;在复杂的企业IT环境中可能瞬间放大…

作者头像 李华
网站建设 2026/5/23 5:02:03

探索3D打印新境界:MKS TinyBee ESP32智能控制主板全解析

探索3D打印新境界&#xff1a;MKS TinyBee ESP32智能控制主板全解析 【免费下载链接】MKS-TinyBee MKS TinyBee is a mainboard for 3d printing, based on ESP32 module 项目地址: https://gitcode.com/gh_mirrors/mk/MKS-TinyBee 在3D打印技术日益普及的今天&#xff…

作者头像 李华