经验笔记:Git 基础操作指南

经验笔记:Git 基础操作指南

1. 安装 Git

首先确保您的计算机上已安装 Git。如果还没有安装,可以从 Git官网 下载并安装。

2. 配置 Git

安装完成后,打开命令行工具,配置您的 Git 账户信息,包括用户名和邮箱。这一步对于记录您的贡献非常重要:

git config --global user.name "Your Name"
git config --global user.email "you@example.com"
  • git: Git 命令行工具。
  • config: 配置命令,用于设置 Git 的各种配置选项。
  • --global: 表示这是一个全局配置,适用于所有 Git 仓库。
  • user.name: 设置用户的姓名。
  • user.email: 设置用户的邮箱。
  • "Your Name": 您的名字,例如 “John Doe”。
  • "you@example.com": 您的邮箱地址,例如 “john.doe@example.com”。

3. 创建一个新的 Git 仓库

接下来,创建一个项目文件夹,并将其初始化为 Git 仓库:

mkdir my-project
cd my-project
git init
  • mkdir: 创建目录的命令。
  • my-project: 新创建的目录名。
  • cd: 变更目录的命令。
  • my-project: 进入刚刚创建的目录。
  • git: Git 命令行工具。
  • init: 初始化命令,用于将当前目录初始化为一个 Git 仓库。

4. 创建并添加文件

在项目中创建一个文件,例如 README.md,并添加一些初始内容:

echo "# My Project" > README.md
  • echo: 输出文本的命令。
  • "# My Project": 要输出的文本内容。
  • >: 重定向操作符,将输出的内容写入文件。
  • README.md: 要创建的文件名。

将此文件添加到 Git 的跟踪列表中:

git add README.md
  • git: Git 命令行工具。
  • add: 添加命令,用于将文件添加到暂存区。
  • README.md: 要添加的文件名。

5. 丢弃更改

如果您想丢弃这些更改,可以使用 git restore 命令:

git restore README.md
  • 未添加到暂存区的更改:

    如果更改尚未被 git add 添加到暂存区,git restore 可以恢复工作区中的文件到上次提交的状态。
  • 已添加到暂存区的更改:

    如果更改已经被 git add 添加到暂存区,git restore 可以将更改从暂存区移回工作区。


6. 提交更改

提交您刚才添加的文件到本地仓库,并附带一条有意义的提交信息:

git commit -m "Initial commit with README file"
# git commit -a -m "Initial commit with README file"
  • git: Git 命令行工具。
  • commit: 提交命令,用于将暂存区的内容提交到本地仓库。
  • -m: 消息选项,用于指定提交信息。
  • -a: 功能选项,自动将所有已跟踪文件的更改添加到暂存区,以便在一次命令中完成添加更改和提交。
  • "Initial commit with README file": 提交信息,描述本次提交的内容。

7. 修改文件并提交

编辑 README.md 文件,添加更多内容,例如项目特性:

echo "## Features" >> README.md
echo "- Feature 1" >> README.md
echo "- Feature 2" >> README.md
  • echo: 输出文本的命令。
  • "## Features": 要输出的文本内容。
  • >>: 重定向操作符,将输出的内容追加到文件末尾。
  • README.md: 要追加内容的文件名。

查看暂存区的更改:

git diff --cached

这将显示暂存区中即将提交的更改:

输出中的a文件代表版本,b文件代表新版本。


再次将文件添加到暂存区并提交:

git add README.md
git commit -m "Add project features to README"
  • git: Git 命令行工具。
  • add: 添加命令,用于将文件添加到暂存区。
  • README.md: 要添加的文件名。
  • commit: 提交命令,用于将暂存区的内容提交到本地仓库。
  • -m: 消息选项,用于指定提交信息。
  • "Add project features to README": 提交信息,描述本次提交的内容。

8. 查看提交历史与状态

查看项目的提交历史和当前工作区的状态:

# git log --oneline
git log
git status
  • git: Git 命令行工具。
  • log: 日志命令,用于查看项目的提交历史。
  • status: 状态命令,用于查看当前工作区和暂存区的状态。
  • oneline: 表示每个提交只显示一行信息,通常包括提交的哈希值和提交信息的简短描述。
  • q 键:退出分页器,返回到命令行

9. 创建与切换分支

为了开发新功能,创建一个新分支 feature-branch 并切换到该分支:

git branch feature-branch
git checkout feature-branch

或者

git checkout -b feature-branch
  • git: Git 命令行工具。
  • checkout: 切换命令,用于切换到指定的分支。
  • branch: 分支命令,用于创建和管理分支。
  • -b: 创建并切换到新分支的选项。
  • feature-branch: 新创建的分支名。

在新分支上继续工作,比如添加新的特性说明:

echo "## New Feature" >> README.md
echo "- Feature 3" >> README.md
  • echo: 输出文本的命令。
  • "## New Feature": 要输出的文本内容。
  • >>: 重定向操作符,将输出的内容追加到文件末尾。
  • README.md: 要追加内容的文件名。

再次将文件添加到暂存区并提交:

git add README.md
git commit -m "Add new feature description"
  • git: Git 命令行工具。
  • add: 添加命令,用于将文件添加到暂存区。
  • README.md: 要添加的文件名。
  • commit: 提交命令,用于将暂存区的内容提交到本地仓库。
  • -m: 消息选项,用于指定提交信息。
  • "Add new feature description": 提交信息,描述本次提交的内容。

10. 切换回主分支

完成新特性的开发后,切换回主分支(通常是 mainmaster):

git checkout main
  • git: Git 命令行工具。
  • checkout: 切换命令,用于切换到指定的分支。
  • main: 要切换到的分支名(如果是 master 分支,可以将 main 替换为 master)。

11. 合并与解决冲突

feature-branch 分支的更改合并到主分支。如果存在冲突,Git 会提示您解决它们:

git merge feature-branch
  • git: Git 命令行工具。
  • merge: 合并命令,用于将一个分支的更改合并到当前分支。
  • feature-branch: 要合并的分支名。

解决完任何可能的冲突后,再次提交更改以完成合并过程:

git add <conflicted-file>
git commit -m "Resolve conflicts after merging feature-branch"
  • <conflicted-file>: 发生冲突的文件名。
  • commit: 提交命令,用于将暂存区的内容提交到本地仓库。
  • -m: 消息选项,用于指定提交信息。
  • "Resolve conflicts after merging feature-branch": 提交信息,描述本次提交的内容。

12. 清理分支

合并完成后,可以安全地删除 feature-branch 分支:

git branch -d feature-branch
  • git: Git 命令行工具。
  • branch: 分支命令,用于创建和管理分支。
  • -d: 删除分支的选项。
  • feature-branch: 要删除的分支名。

13. 丢弃更改

如果您想丢弃工作区中的更改,可以使用以下命令:

13.1 丢弃单个文件的更改

如果您想丢弃某个文件的更改,可以使用以下命令:

git checkout -- <file>
  • git: Git 命令行工具。
  • checkout: 切换命令,用于切换到指定的分支或恢复文件。
  • --: 分隔符,用于区分命令和文件名。
  • <file>: 要恢复的文件名。

13.2 丢弃所有未提交的更改

如果您想丢弃所有未提交的更改,可以使用以下命令:

git reset --hard
  • git: Git 命令行工具。
  • reset: 重置命令,用于将工作区和暂存区恢复到指定的状态。
  • --hard: 选项,表示强制重置,丢弃所有未提交的更改。

示例

假设您修改了 README.md 文件,但决定不保留这些更改:

git checkout -- README.md

如果您想丢弃所有未提交的更改:

git reset --hard

14. 交互式补丁

对于复杂的更改,您可以使用交互式补丁来逐行选择要添加的内容。这种方式特别适合当您只想提交部分更改,而不是整个文件的所有更改时。

步骤 1: 修改文件

假设您已经修改了 README.md 文件,但只想提交其中的一部分更改。

步骤 2: 使用交互式补丁

运行以下命令启动交互式补丁模式:

git add -p
  • git: Git 命令行工具。
  • add: 添加命令,用于将文件添加到暂存区。
  • -p: 选项,表示进入交互式补丁模式。

步骤 3: 选择要添加的更改

Git 会逐块显示文件的更改,并询问您是否要添加每个块。您可以选择以下选项:

  • y - 是,将此块添加到暂存区。
  • n - 否,跳过此块。
  • q - 退出,不再处理剩余的块。
  • a - 将所有剩余的块都添加到暂存区。
  • d - 不将任何剩余的块添加到暂存区。
  • e - 手动编辑当前块。
  • ? - 显示帮助信息。

步骤 4: 提交更改

选择完要添加的块后,提交更改:

git commit -m "Add specific changes from README.md"
  • git: Git 命令行工具。
  • commit: 提交命令,用于将暂存区的内容提交到本地仓库。
  • -m: 消息选项,用于指定提交信息。
  • "Add specific changes from README.md": 提交信息,描述本次提交的内容。

15. 高级操作

15.1 合并提交

使用交互式变基来合并多个提交。这在您想将多个小的提交合并成一个大的提交时非常有用。

步骤 1: 开始交互式变基

假设您想合并最近的3个提交:

git rebase -i HEAD~3
  • git: Git 命令行工具。
  • rebase: 变基命令,用于将一个分支的更改应用到另一个分支。
  • -i: 选项,表示进入交互式变基模式。
  • HEAD~3: 表示从当前提交向前数3个提交。
步骤 2: 编辑提交

Git 会打开一个文本编辑器,列出最近的3个提交。每个提交前面都有一个 pick 关键字,表示将保留该提交。您可以将 pick 更改为 squashs 来合并提交。

例如,假设您的提交历史如下:

pick abc1234 First commit message
pick def5678 Second commit message
pick ghi9012 Third commit message

您可以修改为:

pick abc1234 First commit message
squash def5678 Second commit message
squash ghi9012 Third commit message
步骤 3: 编辑合并后的提交信息

保存并关闭编辑器后,Git 会再次打开编辑器,让您编写合并后的提交信息。您可以编辑或保留默认的提交信息。

步骤 4: 完成变基

保存并关闭编辑器后,变基过程完成,您的提交历史将更新。

15.2 重写提交信息

在交互式变基过程中,您还可以修改提交信息。

步骤 1: 开始交互式变基

假设您想修改最近的3个提交:

git rebase -i HEAD~3
  • git: Git 命令行工具。
  • rebase: 变基命令,用于将一个分支的更改应用到另一个分支。
  • -i: 选项,表示进入交互式变基模式。
  • HEAD~3: 表示从当前提交向前数3个提交。
步骤 2: 编辑提交

Git 会打开一个文本编辑器,列出最近的3个提交。每个提交前面都有一个 pick 关键字,表示将保留该提交。您可以将 pick 更改为 rewordr 来修改提交信息。

例如,假设您的提交历史如下:

pick abc1234 First commit message
pick def5678 Second commit message
pick ghi9012 Third commit message

您可以修改为:

reword abc1234 First commit message
pick def5678 Second commit message
pick ghi9012 Third commit message
步骤 3: 编辑提交信息

保存并关闭编辑器后,Git 会再次打开编辑器,让您重新输入第一个提交的信息。您可以编辑或保留默认的提交信息。

步骤 4: 完成变基

保存并关闭编辑器后,变基过程完成,您的提交信息将更新。

15.3 删除提交

在交互式变基过程中,您还可以删除提交。

步骤 1: 开始交互式变基

假设您想删除最近的3个提交中的一个:

git rebase -i HEAD~3
  • git: Git 命令行工具。
  • rebase: 变基命令,用于将一个分支的更改应用到另一个分支。
  • -i: 选项,表示进入交互式变基模式。
  • HEAD~3: 表示从当前提交向前数3个提交。
步骤 2: 编辑提交

Git 会打开一个文本编辑器,列出最近的3个提交。每个提交前面都有一个 pick 关键字,表示将保留该提交。您可以将 pick 更改为 dropd 来删除提交。

例如,假设您的提交历史如下:

pick abc1234 First commit message
pick def5678 Second commit message
pick ghi9012 Third commit message

您可以修改为:

pick abc1234 First commit message
drop def5678 Second commit message
pick ghi9012 Third commit message
步骤 3: 完成变基

保存并关闭编辑器后,变基过程完成,指定的提交将被删除。

15.4 回退提交

如果您想撤销某个提交,可以使用 git revert 命令:

git revert <commit-hash>
  • git: Git 命令行工具。
  • revert: 回退命令,用于撤销指定的提交。
  • <commit-hash>: 要撤销的提交的哈希值。

示例

假设您想撤销哈希值为 abc1234 的提交:

# 修改文件并提交
echo "This will be revert." >> README.md
git add
git commit -m "a test commit will be revert"
# 查看提交历史,记下要撤销的提交的哈希值。
git log --oneline
# 将last_commit_hash_value替换成实际的撤销的提交的哈希值
git revert last_commit_hash_value
# 实际上git revert也可以被git revert

15.5 保存工作区

如果您想暂时保存工作区中的更改,可以使用 git stash 命令:

步骤 1: 保存更改

保存当前工作区的更改:

# 修改文件
echo "This is a change." >> README.md
# 保存更改到 stash
git stash
  • git: Git 命令行工具。
  • stash: 保存命令,将工作区和暂存区的更改保存到一个临时存储区:
  • git stash 命令将当前工作区和暂存区的所有更改保存到一个临时存储区(stash),并清空工作区和暂存区。
  • 这样,您可以干净地切换到其他任务,然后再恢复这些更改。
步骤 2: 查看所有保存的更改

查看所有保存的更改:

git stash list
  • list: 列表命令,用于查看所有保存的更改。
  • 每个保存的更改都会有一个唯一的标识符,例如 stash@{0}。
步骤 3: 恢复最近一次保存的更改

恢复最近一次保存的更改:

git stash pop
  • pop: 恢复命令,将最近一次保存的更改从临时存储区(stash)移除并应用到工作区。
步骤 4 (可选): 恢复指定的 stash 更改,但不从 stash 存储区中移除

恢复指定的 stash 更改,但不从 stash 存储区中移除:

git stash apply stash@{0}

将 stash@{0} 的更改应用到工作区,但 stash@{0} 仍然保留在临时存储区(stash)中。


16. 工作流整合

16.1 拾取提交

如果您想将一个分支中的某个提交应用到另一个分支上,可以使用 git cherry-pick 命令:

git cherry-pick <commit-hash>
  • git: Git 命令行工具。
  • cherry-pick: 拾取命令,用于将指定的提交应用到当前分支。
  • <commit-hash>: 要拾取的提交的哈希值。

示例

假设您想将哈希值为 <commit-hash-of-feature_n-commit> 的提交应用到当前分支:

# 查看提交历史,方便比较cherry-pick的效果
git log --oneline
# 创建并切换到新分支 feature_n
git checkout -b feature_n
# 在 feature_n 分支上进行提交
echo "Feature 1" >> README.md
git add README.md
git commit -m "Add feature N"
# 查看提交历史,并记下哈希值
git log --oneline
# 切换回主分支 main
git checkout main
# 拾取 feature1 分支上的提交
git cherry-pick <commit-hash-of-feature_n-commit>
# 其中 <commit-hash-of-feature_n-commit> 是 feature_n 分支上 Add feature N 提交的哈希值
# 查看提交历史
git log --oneline

16.2 变基

将当前分支的更改基于另一个分支的最新状态:

git rebase <base-branch>
  • git: Git 命令行工具。
  • rebase: 变基命令,用于将一个分支的更改应用到另一个分支。
  • <base-branch>: 基础分支,通常是 mainmaster

示例

假设您想将当前分支的更改基于 main 分支的最新状态:

# 切换到分支 feature_n
git checkout feature_n
# 查看提交历史,方便比较rebase的效果
git log --oneline
# 将 `feature_n` 分支的更改基于 `main` 分支的最新状态
git rebase main
# 解决冲突(如果有)
git add <conflicted-file>
# 如果在变基过程中出现冲突,Git 会提示您解决冲突。解决冲突后,使用以下命令继续变基
git rebase --continue
# 查看提交历史
git log --oneline

17. 最终检查

最后,再次检查项目的提交历史和状态,确保一切符合预期:

git log
git status
  • git: Git 命令行工具。
  • log: 日志命令,用于查看项目的提交历史。
  • status: 状态命令,用于查看当前工作区和暂存区的状态。
  • q 键:退出分页器,返回到命令行

希望这份详细的 Git 操作指南能帮助您高效地管理和协作您的代码项目。如果您有任何疑问或需要进一步的帮助,请随时查阅 Git 的官方文档或社区资源。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/473893.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端:HTML (学习笔记)【1】

一&#xff0c;网络编程的三大基石 1&#xff0c;URL &#xff08;1&#xff09;url —— 统一资源定位符&#xff1a; 网址——整个互联网中可以唯一且准确的确定一个资源的位置。 【项目外】 网址——https://www.baidu.com/ …

【C++动态规划】3148. 矩阵中的最大得分|1819

本文涉及知识点 C动态规划 LeetCode 3148. 矩阵中的最大得分 给你一个由 正整数 组成、大小为 m x n 的矩阵 grid。你可以从矩阵中的任一单元格移动到另一个位于正下方或正右侧的任意单元格&#xff08;不必相邻&#xff09;。从值为 c1 的单元格移动到值为 c2 的单元格的得…

STM32完全学习——使用标准库点亮LED

一、使用标准库建立工程 &#xff08;1&#xff09;首先我们在ST的网站上面&#xff0c;下载标准库 &#xff08;2&#xff09;将标准外设库加入到项目中 我们一般只会使用到红色标注的那个文件夹&#xff0c;我们一般也只会将这个文件夹导入到工程里面&#xff0c;其他的还有…

解决微信小程序自定义tabbar点击两次才能跳转

在每个页面的js文件下加上此代码&#xff0c;selected属性代表每一个页面的下标&#xff0c;在不同的js文件下&#xff0c;要对应不同的selected值 代码&#xff1a; onShow() { // 确保 TabBar 存在并且设置选中项 if (this.getTabBar && this.getTabBar()) { this.…

学习threejs,使用AnimationMixer实现变形动画

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.AnimationMixer 动画…

Solana应用开发常见技术栈

编程语言 Rust Rust是Solana开发中非常重要的编程语言。它具有高性能、内存安全的特点。在Solana智能合约开发中&#xff0c;Rust可以用于编写高效的合约代码。例如&#xff0c;Rust的所有权系统可以帮助开发者避免常见的内存错误&#xff0c;如悬空指针和数据竞争。通过合理利…

【汇编语言】数据处理的两个基本问题(二) —— 解密汇编语言:数据长度与寻址方式的综合应用

文章目录 前言1. 指令要处理的数据有多长&#xff1f;1.1 通过寄存器指明数据的尺寸1.1.1 字操作1.1.2 字节操作 1.2 用操作符X ptr指明内存单元的长度1.2.1 访问字单元1.2.2 访问字节单元1.2.3 为什么要用操作符X ptr指明 1.3 其他方法 2. 寻址方式的综合应用2.1 问题背景&…

【算法】【优选算法】前缀和(下)

目录 一、560.和为K的⼦数组1.1 前缀和1.2 暴力枚举 二、974.和可被K整除的⼦数组2.1 前缀和2.2 暴力枚举 三、525.连续数组3.1 前缀和3.2 暴力枚举 四、1314.矩阵区域和4.1 前缀和4.2 暴力枚举 一、560.和为K的⼦数组 题目链接&#xff1a;560.和为K的⼦数组 题目描述&#x…

分布式cap理论学习

【分布式】CAP理论详解 一致性(Consistency) 代表数据在任何时刻&#xff0c;任何分布式节点&#xff0c;看到的都是符合预期的。有点类似于幂等&#xff0c;无论访问哪个节点&#xff0c;得到结果数据一致。 可用性(Availability) 强调的是任意时刻一定能读到数据&#xff…

主机型入侵检测系统(HIDS)——Elkeid在Centos7的保姆级安装部署教程

一、HIDS简介 主机型入侵检测系统(Host-based Intrusion Detection System 简称:HIDS);HIDS作为主机的监视器和分析器,主要是专注于主机系统内部(监视系统全部或部分的动态的行为以及整个系统的状态)。 HIDS使用传统的C/S架构,只需要在监测端安装agent即可,且使用用户…

Python蓝桥杯刷题1

1.确定字符串是否包含唯一字符 题解&#xff1a;调用count函数计算每一个字符出现的次数&#xff0c;如果不等于1就输出no&#xff0c;并且结束循环&#xff0c;如果等于1就一直循环直到计算到最后一个字符&#xff0c;若最后一个字符也满足条件&#xff0c;则输出yes import…

【ARM】MDK在debug模式下的Registers窗口包含哪些内容

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决客户对于Debug模式下&#xff0c;对于Registers窗口包含的内容了解。 2、 问题场景 Registers窗口是在进入到debug模式下后&#xff0c;就会出现一个窗口。窗口中包含了很多寄存器信息。但是对于具体内容不了解…

河道无人机雷达测流监测系统由哪几部分组成?

在现代水利管理中&#xff0c;河道无人机雷达监测系统正逐渐成为一种重要的工具&#xff0c;为河道的安全和管理提供了强大的技术支持。那么&#xff0c;这个先进的监测系统究竟由哪几部分组成呢&#xff1f; 河道无人机雷达监测系统工作原理 雷达传感器通过发射电磁波或激光束…

浅谈数据仓库的架构及其演变

一、数据仓库分层架构 数据仓库分层一般分为三层&#xff0c;分别为数据仓库ODS层&#xff08;数据进出口贴源层&#xff09;、CDM层&#xff08;数据公共层&#xff09;和ADS层&#xff08;数据应用层&#xff09;。 1. ODS层&#xff1a;这是数据仓库的最底层&#xff0c;直接…

event_base

build default event_base event_base_new()函数分配并且返回一个新的具有默认设置的event_base。函数会检测环境变量&#xff0c;返回一个到event_base的指针。如果发生错误&#xff0c;则返回NULL。选择各种方法时&#xff0c;函数会选择OS支持的最快方法。 event_base_new…

PyTorch使用教程-深度学习框架

PyTorch使用教程-深度学习框架 1. PyTorch简介 1.1-什么是PyTorch ​ PyTorch是一个广泛使用的开源机器学习框架&#xff0c;特别适合深度学习的应用。它以其动态计算图而闻名&#xff0c;允许在运行时修改模型&#xff0c;使得实验和调试更加灵活。PyTorch提供了强大的GPU加…

数据科学与SQL:如何计算排列熵?| 基于SQL实现

目录 0 引言 1 排列熵的计算原理 2 数据准备 3 问题分析 4 小结 0 引言 把“熵”应用在系统论中的信息管理方法称为熵方法。熵越大&#xff0c;说明系统越混乱&#xff0c;携带的信息越少&#xff1b;熵越小&#xff0c;说明系统越有序&#xff0c;携带的信息越多。在传感…

28.<Spring博客系统⑤(部署的整个过程(CentOS))>

引入依赖 Spring-boot-maven-plugin 用maven进行打包的时候必须用到这个插件。看看自己pom.xml中有没有这个插件 并且看看配置正确不正常。 注&#xff1a;我们这个项目打的jar包在30MB左右。 <plugin><groupId>org.springframework.boot</groupId><artif…

无人机在森林中的应用!

一、森林资源调查 无人机可以利用遥感技术快速获取所需区域高精度的空间遥感信息&#xff0c;对森林图斑进行精确区划。相较于传统手段&#xff0c;无人机调查具有低成本、高效率、高时效的特点&#xff0c;尤其在地理环境条件不好的区域&#xff0c;调查人员无法或难以到达的…

esp32c3开发板通过micropython的mqtt库连MQTT物联网消息服务器

MQTT介绍 MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息协议&#xff0c;旨在设备之间进行通信&#xff0c;尤其是在网络条件较差的情况下。MQTT v3.1.1 和 MQTT v5 是该协议的两个主要版本。 MQTT v3.1.1&#xff1a; 优点&#xff…