当前位置: 首页 > java >正文

【实习总结】快速上手Git:关键命令整理

目录

git的四大工作区域

git首次配置

克隆远程仓库

提交代码到远程仓库

查看文件状态(可选)

添加文件到暂存区

将暂存区的内容提交到本地仓库

将本地的提交上传到远程仓库

拉取并合并代码

第一种方式

第二种方式

分支管理

查看与创建分支

切换分支

合并分支

删除分支

撤销与修改

修改最后一次提交

版本回退 (本地) 

撤销提交

临时储藏(好用)

追溯代码

git blame

git log

git show


git的四大工作区域

在开始介绍git常用操作之前,我们先对git四大工作区域进行介绍,方便后续理解。

1、工作区

是什么:工作区就是我们在电脑上能直接看到的项目文件夹,包含所有源代码、图片等文件,也就是我们直接用编译器进行修改的地方。

文件状态:文件可能处于“已修改”或者“未跟踪”状态。

2、暂存区

是什么:一个位于.git目录中、看不见的特殊文件,它像一个购物车或者待提交清单。

作用:我们如果在工作区做了很多修改,但是我们只想提交其中两个,这时,把这两个文件的快照添加(git add)到暂存区,暂存区能够让我们精确的控制下一次提交要包含哪些内容。

3、本地仓库

是什么: 位于 .git 目录中的另一个部分,它保存了项目所有版本(提交)的完整历史记录。可以把它想象成一个个人电脑上的“版本档案馆”。

作用: 当我们执行 git commit 时,Git 会把 暂存区 里的所有内容,打包成一个永久性的版本快照(一个 commit 对象),并存入本地仓库。这个过程完全在本地电脑上完成,不需要联网。

4、远程仓库

是什么: 托管在网络服务器上的项目仓库(例如 Gitee、GitHub)。

作用: 这是团队成员之间共享代码、同步进度的“中央服务器”。我们可以把本地仓库的提交“推送 (push)”到远程仓库,也可以从远程仓库“拉取 (pull)”别人的提交。

git首次配置

在我们提交前,需要先署名,这个签名会嵌入后续的每一次提交中,方便后期代码追溯。

# 设置你的用户名 (这个名字会显示在提交历史里)
git config --global user.name "名字或昵称"# 设置你的邮箱 (最好和 Gitee/GitHub 账号邮箱一致)
git config --global user.email "your.email@example.com"#查看当前 Git 的所有配置信息
git config --list

这个操作只要在刚开始执行一次就好了,效果如下:

克隆远程仓库

在一开始,我们通常需要从远程服务器完整地复制一个项目代码文件以及所有历史到本地电脑上。

命令如下:

git clone <url>

示例:

git clone https://github.com/example/project.git

这个url,我们去git项目目录下获取即可,如下:

提交代码到远程仓库

查看文件状态(可选)

查看状态,以此可以看到当前每个文件处于哪个区域

git status

添加文件到暂存区

将工作区地修改“快照”并添加到待提交清单中

# 添加一个指定文件
git add main.cpp# 添加一个指定目录
git add src/# 添加所有当前目录下的已修改或新创建的文件
git add .

将暂存区的内容提交到本地仓库

将暂存区的所有内容生成一个永久性的快照,并保存到本地仓库的版本历史中。

# 提交并打开默认编辑器来填写提交信息
git commit# 提交并直接在命令行中附带提交信息 (最常用)
git commit -m "修复了用户登录的bug"# 将 add 和 commit 合并为一步 (仅对已跟踪过的文件有效)
git commit -am "更新了文档说明"

将本地的提交上传到远程仓库

将本地仓库的修改上传到远程仓库。

# 将本地的 main 分支推送到名为 origin 的远程仓库
git push origin main

但是在多人协作的时候,可能会存在其他人对远程仓库进行了新的提交,那么此时,我们本地仓库代码就和远程仓库代码产生了冲突,此时就需要拉取最新的代码到本地,进行合并后在提交到远程仓库

如果合并过程中,两个分支修改了同一个文件的同一行,就会产生 合并冲突。Git 会在文件里标记出冲突,需要你手动编辑文件,解决冲突后,再 add 和 commit 来完成合并。

拉取并合并代码

第一种方式

1、获取远程仓库最新信息

# 从名为 origin 的远程仓库获取所有更新
git fetch origin

从远程仓库下载最新的历史记录和信息(比如新的提交、新的分支),并更新你本地的远程跟踪分支,不会修改本地工作区里的任何文件。

2、检查更新内容

看看新获取的更新,修改了什么

# 比较你本地的 main 和刚刚更新的远程 main 有什么不同
git log main..origin/main# 或者,如果你想看具体的文件差异
git diff main origin/main

3、合并代码

# 确保你当前在自己的 main 分支上
git switch main# 将远程 main 分支的修改,合并到你本地的 main 分支
git merge origin/main

第二种方式

拉取并合并 从远程仓库获取最新版本,并自动与你的本地分支合并。它相当于 git fetch + git merge 。

# 拉取远程仓库名为origin的 main 分支,并与本地当前分支合并
git pull origin main

分支管理

分支是 Git 的精髓,它允许我们创建一条独立的开发线,去开发新功能或修复bug,而不会弄乱主线。

查看与创建分支

# 列出所有本地分支,并高亮当前分支
git branch# 创建一个名为 feature/new-login 的新分支
git branch feature/new-login

切换分支

git checkout <branch> 或 git switch <branch>,切换分支,工作区文件会瞬间变成那个分支所指向的状态

# 切换到已存在的分支
git switch feature/new-login# 创建并立即切换到新分支 (复合命令,非常常用)
git switch -c hotfix/bug-123

合并分支

将一个分支的修改,合并到当前所在的分支。

# 1. 首先,切换到接受合并的目标分支 (如主分支)
git switch main# 2. 然后,执行合并,将 feature 分支合入
git merge feature/new-login

删除分支

# 删除一个已经合并过的本地分支
git branch -d hotfix/bug-123

撤销与修改

修改最后一次提交

git commit --amend修改最后一次提交 如果提交后发现有小错误(比如注释写错了),可以用它来修正。

git commit --amend "bug修改"
git commit --amend --no-edit  # --no-edit 表示不修改上次的提交信息

版本回退 (本地) 

移动分支指针,回到过去某个版本。 警告:如果提交已推送到远程,请不要使用,因为它会重写历史,给团队带来麻烦。

常用选项

  • - --soft : 仅移动 HEAD 指针,你的工作区和暂存区不变。
  • - --mixed (默认): 移动 HEAD,并重置暂存区,但工作区不变。
  • - --hard : (极度危险) 移动 HEAD,并 彻底重置 暂存区和 工作区 ,所有未提交的修改都会 永久丢失 。
# 彻底回退到上一个版本,工作区和暂存区都恢复 (危险!)
git reset --hard HEAD~1

撤销提交

创建一个新的提交 ,其内容刚好是指定提交的 反向操作 。这是推荐的撤销方式 ,因为它不重写历史,适合用于撤销已经推送到远程的提交。

git revert <commit_hash_of_bad_commit>

临时储藏(好用)

当你手头工作没做完,但需要紧急切换到别的分支时,用它来保存当前工作区和暂存区的修改。

# 保存当前修改
git stash save "temp message"# 处理完别的事情后,回来恢复
git stash pop#查看所有暂存的更改
git stash list#应用最近一次暂存的更改
git stash apply#删除指定的暂存记录
git stash drop

追溯代码

  • 想知道某一行代码是谁写的?  用 git blame 。

  • 想知道某个文件/项目的演变过程? 用 git log 。

  • 想看某次提交到底干了什么? 先用 git log 找到它,再用 git show 查看它。

git blame

        如果想知道某一行代码是谁、在哪个版本、什么时候修改的,可以使用git blame,他会按行显示文件的每一行最后是被哪个提交修改的。

# 查看指定文件的每一行代码的“身世”
git blame [文件路径]

git log

git log 是一个功能极其丰富的历史浏览器,可以让我们查看一个分支、一个文件甚至一个函数的完整演变历史。

常用选项:

  • git log --oneline : 单行显示,更紧凑。
  • git log --graph : 以图形方式展示分支的合并与分叉。
  • git log -p <文件名> : 显示指定文件的历史,并附带每次提交的具体代码差异。
  • git log --author="作者名" : 只看某个特定成员的提交。

a)查看整个项目的历史

# 查看所有提交记录
git log# 查看简化的单行历史,并带上分支图
git log --oneline --graph --decorate

b)查看单个文件的所有修改记录

git log [文件路径]

c)查看单个文件内容的具体的变化记录

如果我们不仅想看提交记录,还想看每次提交具体改了什么代码 ,可以加上 -p 参数

git log -p [文件路径]

这会把每一次涉及该文件的修改,用 diff 的格式全部展示出来。

git show

当我们通过 git log 或 git blame 找到了一个可疑的提交哈希码(比如 c4d2a8f ),可以用 git show 来查看这次提交的所有细节,比如(作者、日期、提交信息)和它所做的所有代码改动。

git show [提交哈希码]

http://www.xdnf.cn/news/18676.html

相关文章:

  • AI版权保护破局内容行业痛点:侵权识别效率升89%+维权周期缩至45天,区块链存证成关键
  • vue中 computed vs methods
  • unity热更新总结
  • Linux的线程概念与控制
  • CTFshow系列——命令执行web49-52
  • 基于深度学习的眼疾识别系统:从血细胞分类到病理性近视检测
  • 计算机网络:聊天室(UDP)
  • 用户和组笔记
  • 大数据毕业设计选题推荐-基于大数据的北京市医保药品数据分析系统-Spark-Hadoop-Bigdata
  • 基于角色的访问控制(RBAC)研究与Go语言实现
  • 商超客流密度统计误差率↓35%!陌讯多模态融合算法在零售智慧运营的实战解析
  • 美股期权历史市场数据波动特性分析
  • power query自定义查询函数(中午休息一小时
  • 基于Spark的热门旅游景点数据分析系统的设计-django+spider
  • 基于springboot的理商管理平台设计与实现、java/vue/mvc
  • pom.xml 标签整理各个标签的用途和含义
  • 复杂场景鲁棒性突破!陌讯自适应融合算法在厂区越界检测的实战优化​
  • 57 C++ 现代C++编程艺术6-类的内部类
  • DBeaver连接SQL Server集成认证问题解决方案
  • 题解:P13822 「Diligent-OI R2 B」白露为霜_奇偶性_数学归纳_算法竞赛C++
  • 将C++资源管理测试框架整合到GitLab CI/CD的完整实践指南
  • ffmpeg 问答系列-> mux 部分
  • C6.1:发射极偏置放大器
  • 阿里 通义千问 Java23种设计模式
  • IDM 下载失败排查指南:全面解析与解决方案
  • 深入解析 std::enable_if:原理、用法与现代 C++ 实践
  • 编程与数学 02-017 Python 面向对象编程 20课题、迭代器模式
  • 大数据毕业设计选题推荐-基于大数据的丙型肝炎患者数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
  • 深入解析十大经典排序算法原理与实现
  • 室联人形机器人:家政服务任务结构化、技术要点、深入应用FPGA的控制系统框架设计(整合版A)