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

Git 常用命令速查表

一、仓库初始化与克隆

命令说明
git init在当前目录初始化本地仓库
git clone <远程仓库地址>克隆远程仓库到本地(例:git clone https://github.com/user/repo.git

二、文件状态与提交

命令说明
git status查看工作区 / 暂存区文件状态
git add <文件名>将指定文件添加到暂存区
git add .将所有变更文件添加到暂存区
git commit -m "提交说明"从暂存区提交到本地仓库(说明需简洁)
git commit -am "提交说明"跳过暂存区,直接提交已跟踪文件的修改

三、分支操作

命令说明
git branch列出本地分支(当前分支前带 *
git branch -r列出远程分支
git branch <分支名>创建新分支(基于当前分支)
git checkout <分支名>切换到指定分支(Git 2.23+ 推荐用 git switch
git switch <分支名>切换到指定分支(较新语法)
git checkout -b <分支名>创建并切换到新分支(等价于 git switch -c
git merge <分支名>将指定分支合并到当前分支
git branch -d <分支名>删除已合并的本地分支
git branch -D <分支名>强制删除未合并的本地分支
git push origin -d <分支名>删除远程分支
git branch -vv显示本地分支的详细信息,包括每个分支与远程分支的关联关系、最新提交以及本地与远程的同步状态

四、远程仓库交互

命令说明
git remote add origin <远程地址>关联远程仓库(origin 为默认别名)
git remote -v查看远程仓库地址
git pull origin <分支名>拉取远程分支最新代码并合并到本地(例:git pull origin main
git push origin <分支名>将本地分支推送到远程仓库(首次推送可加 -u 关联:git push -u origin main
git fetch获取远程仓库最新分支信息(不合并)
git merge将一个分支的修改合并到当前分支

五、版本查看与回溯

命令说明
git log查看提交历史(按 q 退出)
git log --oneline简洁显示提交历史(一行一个提交)
git log --graph --oneline图形化显示分支合并历史
git reflog

记录本地仓库所有引用(分支、标签等)变更历史

远程操作需用git log或者git fetch同步后查看

git reset --hard <提交哈希>回退到指定版本(哈希从 git log 获取)
git checkout -- <文件名>撤销工作区中文件的修改(恢复到最近提交状态)
git reset HEAD <文件名>将暂存区的文件移回工作区(取消 git add 操作)
git revert <提交哈希>创建新提交以撤销某次提交的修改(安全回溯,保留历史)

六、其他常用命令

命令说明
git stash暂存当前工作区的变更(用于临时切换分支)
git stash pop恢复最近一次 stash 的内容并删除 stash 记录
git stash list查看所有 stash 记录
git tag <标签名>给当前提交打标签(用于标记版本,如 git tag v1.0
git tag列出所有标签
git push origin <标签名>推送标签到远程仓库
git diff查看工作区与暂存区的差异
git diff --cached查看暂存区与本地仓库的差异


git remote

git remote 是 Git 中用于管理本地仓库与远程仓库(如 GitHub、GitLab 等平台上的仓库)连接关系的命令。它的核心作用是简化对远程仓库的操作 —— 通过给远程仓库地址设置一个 “别名”,避免每次与远程仓库交互时都输入冗长的 URL。

具体作用

  1. 管理远程仓库的别名
    远程仓库的 URL 通常很长(如 https://github.com/username/project.git),git remote 可以为其设置一个简短别名(默认常用 origin),之后操作远程仓库时只需用别名即可(如 git push origin main 替代 git push https://github.com/... main)。

  2. 查看远程仓库信息
    可以通过 git remote 相关命令查看当前本地仓库关联了哪些远程仓库,以及它们的地址。

  3. 添加 / 删除 / 修改远程仓库连接
    当需要关联新的远程仓库、移除无效连接,或更换远程仓库地址时,都可以通过 git remote 命令完成。

常用 git remote 命令示例

命令说明
git remote列出当前本地仓库关联的所有远程仓库的别名(如 origin
git remote -v显示每个远程仓库别名对应的详细 URL(-v 是 --verbose 的缩写),包括拉取(fetch)和推送(push)地址
git remote add <别名> <远程仓库URL>添加一个新的远程仓库关联(例如:git remote add origin https://github.com/user/repo.git
git remote remove <别名>移除指定别名的远程仓库关联(例如:git remote remove origin
git remote rename <旧别名> <新别名>重命名远程仓库的别名(例如:git remote rename origin myrepo
git remote set-url <别名> <新URL>修改远程仓库的 URL(例如:git remote set-url origin https://github.com/new-user/repo.git

git merge

基本用法

假设当前在 main 分支,要将 feature/login 分支的修改合并到 main 分支:

# 1. 确保当前分支是目标分支(如 main)
git checkout main# 2. 合并 feature/login 分支到当前分支
git merge feature/login

合并的三种常见情况

  1. 快进合并(Fast-forward)
    如果目标分支(如 main)没有新提交,而待合并分支(如 feature/login)是基于目标分支创建的,Git 会直接将目标分支指针移动到待合并分支的最新提交,不会产生新的合并记录。
    示例输出:Updating a1b2c3d..e4f5g6h

  2. 普通合并(No-fast-forward)
    如果目标分支有新提交,Git 会创建一个新的合并提交,将两个分支的修改整合,同时保留双方的提交历史。
    示例输出:Merge made by the 'ort' strategy.(会生成新的合并提交哈希)

  3. 冲突合并(Conflict)
    若两个分支修改了同一文件的同一部分,Git 无法自动合并,会提示冲突(Automatic merge failed),需要手动解决冲突后再提交:

# 1. 解决文件中标记的冲突(搜索 <<<<<<< HEAD 等标记)
# 2. 标记为已解决
git add <冲突文件>
# 3. 完成合并提交
git commit -m "Resolve merge conflicts"

常用选项

命令说明
git merge --no-ff <分支名>强制创建合并提交(即使可以快进合并),保留分支合并轨迹
git merge --abort放弃当前合并过程,恢复到合并前的状态(适用于解决冲突失败时)
git merge --squash <分支名>将待合并分支的所有修改压缩为一个新提交,再合并到当前分支(简化历史)

注意事项

  • 合并前建议先拉取远程最新代码(git pull),减少冲突概率。
  • 合并只影响当前分支,待合并分支的内容不会被修改。
  • 复杂项目中,建议使用 git merge 整合经过测试的功能分支,避免直接合并未完成的代码。

git cherry-pick

只转移源分支上特定的某次或某几次提交(而非整个分支的所有历史)到目标分支,可以使用 git cherry-pick 命令,它能精准地将指定提交应用到当前分支。

操作步骤:

  • 查看源分支的提交记录,找到需要转移的提交的哈希值(commit ID):
# 切换到源分支
git checkout 源分支名# 查看提交历史(获取需要转移的提交的哈希值,通常是前几位即可)
git log --oneline

        输出类似:

a1b2c3d (HEAD -> 源分支) 修复XX问题
e4f5g6h 添加XX功能
...

        假设要转移的是 a1b2c3d 这次提交。

  • 切换到目标分支(要转移到的分支):
git checkout 目标分支名
  • 将指定提交应用到目标分支
# 应用单个提交
git cherry-pick a1b2c3d

        如果需要转移连续的多个提交(例如从 e4f5g6h 到 a1b2c3d),可以指定范围:

git cherry-pick e4f5g6h..a1b2c3d
  • 处理冲突(若有)
    • 如果出现冲突,命令行会提示 Automatic cherry-pick failed.
    • 打开冲突文件,找到并解决冲突标记(<<<<<<<=======>>>>>>>
    • 解决后执行:
git add .  # 标记冲突已解决
git cherry-pick --continue  # 继续完成cherry-pick

          若想放弃此次操作,执行:git cherry-pick --abort

特点:

  • 只转移指定的提交内容,不影响目标分支的其他历史。
  • 每个被转移的提交会在目标分支生成一个新的提交(哈希值与源分支不同,但内容相同)。

适合场景:只想同步源分支上的某几个特定改动,而非整个分支的所有更新。


 git reflog

git reflog 是 Git 中用于记录本地仓库所有引用(分支、标签等)变更历史的命令。它能追踪几乎所有对仓库的操作(如提交、切换分支、合并、重置等),即使是被删除的提交或分支,也能通过 reflog 找到痕迹。

核心作用

  1. 恢复误操作:当你不小心删除分支、执行了错误的 git reset 或 git merge,导致提交丢失时,reflog 可以帮你找到丢失的提交哈希值,从而恢复数据。
  2. 追踪操作历史:记录你在本地仓库的所有关键操作(如切换分支、提交、合并等),方便回溯操作轨迹。

基本用法

执行以下命令查看本地引用变更历史:

git reflog

示例输出(简化版):

8a639f182 (HEAD -> ADCNODL, origin/ADCNODL) HEAD@{0}: commit: Solve cross-platform issue
7b32c5d1e HEAD@{1}: checkout: moving from master to ADCNODL
890611a6d (master) HEAD@{2}: pull origin master: Fast-forward
a1b2c3d4e HEAD@{3}: commit: Fix bug in login module

输出内容解读:

每一行代表一次引用变更,格式为:

<提交哈希> HEAD@{<操作序号>}: <操作类型>: <操作描述>
  • <提交哈希>:操作后指向的提交 ID(前几位)。
  • HEAD@{<操作序号>}HEAD 指针的变更记录,@{0} 表示最近一次操作,@{1} 表示上一次,以此类推。
  • <操作类型>:如 commit(提交)、checkout(切换分支)、reset(重置)、merge(合并)等。
  • <操作描述>:对操作的简要说明(如提交信息、分支名等)。

实用场景

恢复丢失的提交
若执行 git reset --hard 误删了提交,可通过 git reflog 找到被删除的提交哈希,再用 git reset --hard <哈希> 恢复:

git reflog  # 找到需要恢复的提交哈希(如 a1b2c3d4e)
git reset --hard a1b2c3d4e

恢复删除的分支
若分支被删除,可通过 reflog 找到该分支最后一次提交的哈希,再基于此创建分支:

git reflog  # 找到被删分支的最后一个提交哈希(如 7b32c5d1e)
git checkout -b 恢复的分支名 7b32c5d1e

查看近期操作轨迹
当忘记自己做过哪些操作时(如切换过哪些分支、合并过哪些提交),git reflog 可清晰展示操作历史。

注意事项

  • reflog 仅记录本地仓库的操作,不包含远程仓库的变更(远程操作需用 git log 或 git fetch 同步后查看)。
  • 默认情况下,reflog 记录会保留 90 天(可通过配置修改),过期后会自动清理。
  • 它是本地安全网,不会上传到远程仓库,仅对当前本地仓库有效。

如何将远程分支变为本地分支

要将远程分支(如 origin/feature-branch)转换为本地可编辑的分支,通常需要创建一个与远程分支关联的本地分支,并建立跟踪关系(方便后续 pull/push 操作)。以下是具体步骤:

步骤 1:获取远程分支的最新信息

首先确保本地仓库知晓远程分支的存在(尤其是远程新创建的分支),需要先同步远程仓库的元数据:

git fetch origin  # origin 是远程仓库的别名,同步该远程的所有分支信息

步骤 2:查看远程分支

确认需要转换的远程分支名称(格式通常为 远程别名/分支名):

git branch -r  # 列出所有远程分支
# 示例输出:origin/main、origin/feature/login、origin/bugfix/v1.0

步骤 3:创建并切换到本地分支(关联远程分支)

有两种常用方式,效果相同,选择其一即可:

方式 1:直接切换(推荐,自动关联)

使用 git checkout 或 git switch(Git 2.23+ 推荐)直接基于远程分支创建本地分支,Git 会自动建立跟踪关系:

# 语法:git checkout 远程分支名(省略远程别名,如 origin/feature/login → feature/login)
git checkout feature/login# 或用 git switch(更直观)
git switch feature/login

执行后,本地会创建一个名为 feature/login 的分支,并自动关联远程分支 origin/feature/login

方式 2:手动创建并关联(更灵活)

如果需要自定义本地分支名(与远程分支名不同),或明确指定关联关系:

# 语法:git checkout -b 本地分支名 远程别名/远程分支名
git checkout -b my-login origin/feature/login# 或用 git switch(更直观)
git switch -c my-login origin/feature/login

上述命令会创建本地分支 my-login,并关联远程分支 origin/feature/login

步骤 4:验证是否成功

检查本地分支及其关联的远程分支:

git branch -vv  # 列出本地分支,并显示关联的远程分支
# 示例输出:
# * feature 8a639f182 [origin/feature] 提交说明
# master 890611a6d [origin/master: behind 1] 提交说明# 这两行信息清晰展示了:# 本地有两个分支:ADCNODL(当前分支)和 master。
# 两个分支都分别关联了远程仓库(origin)的同名分支。
# master 分支需要从远程拉取 1 个新提交才能与远程同步,而 ADCNODL 分支与远程分支状态一致(无落后 # / 超前提示)。

第一行:* feature 8a639f182 [origin/feature] 提交说明

  • *:表示当前处于 feature分支(当前工作分支)。
  • feature:本地分支的名称。
  • 8a639f182:该本地分支最新一次提交的哈希值(前几位,用于唯一标识这个提交)。
  • [origin/feature]:表示这个本地分支关联了远程仓库(origin)的 feature分支(即 “跟踪关系”),后续执行 git pull/git push 时会默认与该远程分支交互。
  • 最后的文字:该本地分支最新一次提交的说明信息。

第二行:master 890611a6d [origin/master: behind 1] 提交说明

  • master:另一个本地分支的名称(非当前分支,因为没有 *)。
  • 890611a6d:该分支最新一次提交的哈希值。
  • [origin/master: behind 1]:表示本地 master 分支关联了远程仓库的 origin/master 分支,且本地分支比远程分支落后 1 个提交(即远程 origin/master 有 1 个本地 master 没有的新提交,需要 git pull 拉取更新)。
  • 最后的文字:该分支最新一次提交的说明信息。

后续操作

关联后,对本地分支的修改可以直接推送到远程分支,无需指定远程和分支名:

git push  # 等价于 git push origin feature/login(如果当前分支是 feature/login)
git pull  # 等价于 git pull origin feature/login,拉取远程最新更新

回退Git合并

    回退 Git 合并操作(即撤销已完成的 git merge)需要根据合并是否已推送到(推送到远程仓库)采取不同的处理方式,核心是要撤销合并产生的变更并恢复到合并前的状态。

    情况 1:合并后未推送到远程(仅本地操作)

    如果合并仅在本地完成,尚未 git push 到远程仓库,可直接使用 git reset 回退到合并前的状态:

    找到合并前的提交哈希
    先通过 git log 或 git reflog 查看合并记录,找到合并前的最后一个正常提交的哈希值(假设合并前的提交哈希为 a1b2c3d):

    git log --oneline  # 查看提交历史,合并提交会显示 "Merge branch 'xxx'"
    # 或
    git reflog  # 查看操作记录,找到合并前的状态(如 HEAD@{2}: checkout: ...)

    回退到合并前的状态
    使用 --hard 选项彻底回退工作区、暂存区和本地仓库:

    git reset --hard a1b2c3d  # 替换为合并前的提交哈希

    执行后,当前分支会回到合并前的状态,合并产生的变更被完全撤销。

    情况 2:合并已推送到远程(需谨慎)

    如果合并已经推送到远程仓库,不能用 git reset(会导致本地与远程历史不一致),推荐使用 git revert 创建一个 “反合并” 提交,既能撤销变更,又不破坏提交历史:

    找到合并提交的哈希
    合并提交是 git merge 产生的新提交,通过 git log 找到它的哈希值(假设为 m7n8o9p

    git log --oneline  # 合并提交会显示 "Merge branch 'xxx' into yyy"

    创建反合并提交
    使用 git revert 并添加 -m 1 选项(表示保留当前分支的版本,撤销被合并分支的变更):

    git revert -m 1 m7n8o9p  # 替换为合并提交的哈希
    • -m 1 中的 1 表示 “第一个父提交”,即合并操作前当前分支的最后一个提交(可理解为 “保留当前分支,撤销合并进来的分支”)。

    提交反合并结果
    执行后会自动打开编辑器,填写撤销合并的说明(如 “Revert "Merge branch 'feature/x'"”),保存退出即可完成提交。

    推送到远程
    最后将反合并提交推送到远程,同步变更:

    git push origin <当前分支名>

    关键区别

    方式适用场景优点缺点
    git reset --hard未推送远程操作简单,彻底删除合并记录会修改历史,推送后会影响他人
    git revert -m已推送远程不修改历史,安全协作会产生新的提交,历史中保留合并和反合并记录

    注意事项

    • 若合并后有新的提交,git reset 会同时删除这些新提交(需谨慎),而 git revert 只会撤销合并本身的变更。
    • 执行操作前,建议用 git branch 创建一个临时分支备份当前状态,防止误操作。

    http://www.dtcms.com/a/327990.html

    相关文章:

  • 最终章【1】Epson机器人篇
  • 微服务项目中的注册中心——Nacos配置
  • 【每日一题】Day 1
  • ETCD备份
  • Flask + Vue.js 物联网数字大屏实现方案
  • 学习:JS[9]作用域+函数进阶+深入对象+实例成员和静态成员
  • 为什么神经网络的权重矩阵具有低秩特性?如何理解和解释?
  • [Robotics_py] 机器人运动模型 | `update`函数 | 微积分矩阵
  • 线性代数 · 矩阵 | 最小多项式
  • 有限元方法中的数值技术:行列式、求逆、矩阵方程
  • 企业高性能web服务器(1)
  • 腾讯云服务器账户转移操作详解
  • ip归属地批量查询脚本
  • vue2+elementUI实现园型动态步骤条小组件,带缩放功能
  • ENCOPIM, S.L. 参展 AUTO TECH China 2025 广州国际汽车技术展览会
  • 基于STC8单片机的RTC时钟实现:从原理到实践
  • Cloud Computing(云计算)和Sky Computing(天空计算)
  • 自然语言处理关键库解析和使用方法- FuzzyWuzzy
  • kafka初步介绍
  • mysql登录失败 ERROR1698
  • Java零基础笔记15(Java编程核心:Stream流、方法中的可变参数、Collections工具类)
  • Ceph对象池详解
  • 数据分析专栏记录之 -基础数学与统计知识
  • js高阶-总结精华版
  • 《软件工程导论》实验报告一 软件工程文档
  • 跨界重构规则方法论
  • AI重构Java开发:飞算JavaAI如何实现效率与质量的双重突破?
  • pcl 按比例去除点云的噪点
  • 自动化运维实验
  • Baumer高防护相机如何通过YoloV8深度学习模型实现纸箱的实时检测计数(C#代码UI界面版)