📌版本

  • Dev开发者
  • Release发行版
  • Debug
  • Profiling性能分析
  • main(Beta)

📌日志

  • 调通
  • 新增
  • 修复
  • 优化
  • 修改

📌用户名&邮箱

查看用户名 git config user.name
设置用户名 git config --global user.name "您的名字"
查看邮箱 git config user.email
设置邮箱 git config --global user.email "您的邮箱"

📌远程仓库

查看远程仓库地址 git remote -v
修改远程仓库地址 git remote set-url origin 新的仓库地址

获取指定远程仓库的所有分支
fetch_all_branches.sh

#!/bin/bash

# 检查是否传入参数
if [ -z "$1" ]; then
    echo "用法: $0 <Git仓库地址>"
    echo "示例: $0 https://e.coding.net/xxx/xxx.git"
    exit 1
fi

REPO_URL="$1"
DIR_NAME=$(basename "$REPO_URL" .git)

echo ">> 仓库地址: $REPO_URL"
echo ">> 目标目录: $DIR_NAME"

# === 如果目录不存在,执行 clone ===
if [ ! -d "$DIR_NAME" ]; then
    echo ">> 正在 clone 仓库..."
    git clone "$REPO_URL" "$DIR_NAME"
else
    echo ">> 仓库目录已存在,跳过 clone..."
fi

cd "$DIR_NAME" || { echo "无法进入目录 $DIR_NAME"; exit 1; }

# === 拉取所有远程分支 ===
echo ">> 正在 fetch 所有远程分支..."
git fetch --all

# === 获取所有远程分支并创建本地对应分支 ===
echo ">> 正在创建本地分支..."
for remote in $(git branch -r | grep -v '\->'); do
    local_branch="${remote#origin/}"
    if git show-ref --verify --quiet "refs/heads/$local_branch"; then
        echo ">> 本地分支已存在: $local_branch,跳过..."
    else
        echo ">> 创建并追踪分支: $local_branch"
        git checkout --track "$remote"
    fi
done

echo ">> 所有远程分支已拉取并创建完毕。"

# === 切换到远程默认分支(如 origin/HEAD 指向的分支)===
DEFAULT_REMOTE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')

if [ -n "$DEFAULT_REMOTE_BRANCH" ]; then
    echo ">> 正在切换到默认分支: $DEFAULT_REMOTE_BRANCH"
    git checkout "$DEFAULT_REMOTE_BRANCH"
else
    echo ">> 无法识别远程默认分支,跳过切换"
fi

将本地所有分支推送到远程仓库
push_all_branches.sh

#!/bin/bash

# 检查参数
if [ -z "$1" ]; then
    echo "用法: $0 <remote-name>"
    echo "例如: $0 origin"
    exit 1
fi

REMOTE="$1"

# 获取所有本地分支
branches=$(git for-each-ref --format='%(refname:short)' refs/heads/)

for branch in $branches; do
    echo "正在推送: $branch 到 $REMOTE/$branch"
    git push "$REMOTE" "$branch:$branch"
done

📌暂存(stash)

当前分支有改动时,不提交的情况下切换分支,可以将改动暂存到堆栈

git stash 命令的作用如下

  1. 存储到堆栈

git stash 会将修改的文件、暂存区的更改、未被追踪的文件以及忽略的文件的更改保存到一个新的堆栈中。这样,工作区和暂存区就都干净了,可以切换到其他分支处理其他需求。

  1. 查看堆栈中的 stash 列表

通过 git stash list 命令,您可以查看堆栈中的所有 stash,每个 stash 都有一个唯一的标识符(stash_id)。

  1. 查看 stash 的内容

使用 git stash show 命令可以查看某个 stash 的具体修改内容。

  1. 将堆栈中的 stash 应用到工作区

使用 git stash apply stash@{id} 命令可以将堆栈中指定的 stash 应用到工作区,保留堆栈的内容。

  1. 删除堆栈中的 stash

使用 git stash drop stash@{id} 命令可以删除指定的 stash。


📌分支

当前分支重命名 git branch -m new_name

📌子模块

  1. 更新子模块
    git submodule update
    该命令会从子模块的远程仓库中拉取子模块的内容,并将其更新到 .gitmodules 文件中指定的提交。
    常见用法:在初始化子模块后,或当你需要更新子模块的内容时,运行此命令。
  2. 添加子模块
    git submodule add <repo-url> [<path>]
    该命令会将指定的 Git 仓库作为子模块添加到当前仓库中。
    <repo-url> 是子模块的仓库地址,<path> 是子模块在主仓库中的路径(可选,如果不指定,默认使用子模块仓库的名称作为路径)。
    常见用法:将外部库作为子模块添加到项目中。
    git submodule add https://github.com/example/libfoo.git libfoo
  3. 克隆时直接包含子模块
    添加 --recurse-submodules参数:
    git clone --recurse-submodules ssh://git@git.luciusxu.cn:27/25Oct30-Test_MISC_Hello/25Oct30-Test_MISC_Hello.git

📌补丁

1. 生成工作区或暂存区差异的补丁

如果要基于当前工作区(未 git add 的修改)或者暂存区(已 git add 但未提交的修改)生成补丁,可以使用 git diff 结合重定向输出到文件的方式:
1.1. 基于工作区修改生成补丁

# 生成工作区所有文件修改的补丁,输出到 workspace.patch
git diff > workspace.patch

1.2. 基于暂存区修改生成补丁
如果已经通过 git add 将修改提交到暂存区,想要生成暂存区与上一次提交(HEAD)之间差异的补丁:

git diff --cached > staged.patch

这里 --cached 选项表示对比暂存区和 HEAD(当前分支最新提交)的差异,生成的补丁文件 staged.patch 就包含了这些差异内容。
1.3. 基于工作区和暂存区同时生成补丁
合并上面两个补丁文件

# 合并为一个完整补丁(顺序不能反)
cat staged.patch workspace.patch > combined.patch

2. 基于提交(commit)生成补丁

2.1. 基于某次提交生成单个补丁

git format-patch -1 <commit-hash>
  • -1 表示只生成一个补丁
  • 会输出一个 .patch 文件,包含该提交的所有变更内容
    例如:
    git format-patch -1 3f2a9c7
    输出类似:
    0001-fix-usb-driver-init.patch

3. 应用补丁

生成补丁后,想要应用这些补丁,可以使用 git apply 或者 git am 命令:
3.1. 使用 git apply 应用补丁(简单应用差异,不保留提交信息)

# 应用 patchfile.patch 里的差异到当前工作区
git apply patchfile.patch

如果补丁应用过程中遇到冲突,可以加上 --reject 选项,Git 会把冲突部分保存到 .rej 文件中,方便手动解决冲突后再重新尝试应用:

git apply --reject patchfile.patch

3.2. 使用 git am 应用补丁(保留提交信息,适用于 git format-patch 生成的包含提交信息的补丁)

# 应用单个补丁文件
git am 0001-<提交说明的简短描述>.patch

# 应用多个补丁文件(按顺序应用)
git am 0001-*.patch

如果应用过程中遇到冲突,git am 会暂停,需要解决冲突后,使用 git add 标记冲突已解决,然后执行 git am --continue 继续应用剩下的补丁;如果想放弃当前应用补丁的操作,可以执行 git am --abort


📌凭据存储助手(credential.helper)

Git 的凭据存储助手(Credential Helper)旨在简化凭据管理,使用户无需频繁输入用户名和密码。以下是详细介绍及用法:

凭据助手的种类

  1. Cache 模式
    • 凭据存储在内存中,默认有效时间为 15 分钟。
    • 可通过 --timeout 设置自定义时间(例如,cache --timeout=3600 表示缓存 1 小时)。
  2. Store 模式
    • 凭据以明文形式存储在本地磁盘(默认路径为 ~/.git-credentials)。
    • 不会过期,适合个人设备,但需注意安全风险。
  3. OSXKeychain 和 Wincred 模式
    • 分别将凭据存储在 macOS 的钥匙串和 Windows 的凭据管理器中。
    • 更加安全,凭据受操作系统加密保护。

设置方式

  1. 全局设置(适用于所有项目):
    git config --global credential.helper store
    
    这将在主目录下保存 .git-credentials 文件。
  2. 项目级设置(仅适用于当前项目):
    git config credential.helper store
    
    凭据将存储于 .git/config 文件中。
  3. 自定义路径
    git config --global credential.helper 'store --file ~/.my-credentials'
    
  4. 临时缓存(使用 Cache):
    git config --global credential.helper 'cache --timeout=3600'
    

文件格式

凭据文件通常以以下形式存储:
https://username:password@repository.url

安全性提示

  • 明文存储(Store 模式)不建议在公共设备上使用。
  • 如果使用 Cache 模式,尽量缩短凭据存储时间。
  • 推荐优先使用系统集成的加密助手,如 OSXKeychain 或 Wincred。

📌查看文件的差异

1. 查看当前工作区 vs 最近一次提交的差异

git diff <文件路径>

示例:

git diff src/main.c

这会显示当前文件与 HEAD(上一次提交)之间的差异(未提交的更改)。

2. 查看某两个提交之间的某文件差异

git diff <commit1> <commit2> -- <文件路径>

示例:

git diff abc123 def456 -- src/main.c

会显示 src/main.c 在两个提交之间的变更。

3. 查看已暂存(git add)但还未提交的更改

git diff --cached <文件路径>

示例:

git diff --cached README.md

4. 查看某个提交中某个文件的变更

git show <commit> -- <文件路径>

示例:

git show abc123 -- include/config.h

5. 打印出所有文件中指定文件的历史修改记录(按 diff 展示)

git log -p -- <文件路径>

示例:

git log -p -- src/utils/helper.c

6. 只看某个文件在历史上的哪些行被改了(简略版)

git blame <文件路径>

也可看某次提交前后:

git blame <commit>^ -- <文件>

📌Windows 10 的 PowerShell 支持 Git 命令补全

1. 安装posh-git模块

posh-git是一个 PowerShell 模块,提供 Git 命令补全和状态显示功能。打开 PowerShell(以管理员身份运行),执行以下命令:

Install-Module posh-git -Scope CurrentUser -Force

2. 安装PSReadLine模块(如果未安装)

PSReadLine提供高级命令行编辑功能,包括命令补全:

Install-Module PSReadLine -Scope CurrentUser -Force

3. 配置 PowerShell 配置文件

创建或编辑 PowerShell 配置文件,添加模块加载命令:
3.1. 检查配置文件路径

$PROFILE

3.2. 创建配置文件(如果不存在)

if (!(Test-Path $PROFILE)) { New-Item -Path $PROFILE -Type File -Force }

3.3. 编辑配置文件

notepad $PROFILE

3.4. 添加以下内容到配置文件

# 加载 posh-git 模块
Import-Module posh-git

# 加载 PSReadLine 模块并启用预测性 IntelliSense
Import-Module PSReadLine
Set-PSReadLineOption -PredictionSource History
Set-PSReadLineOption -PredictionViewStyle ListView
Set-PSReadLineOption -EditMode Windows

4. 使配置生效

关闭并重新打开 PowerShell,或执行:

. $PROFILE

5. 验证命令补全

在 PowerShell 中输入git,然后按Tab键,应该能看到 Git 命令补全选项。例如:

  • 输入git che,按Tab会补全为git checkout
  • 输入git branch -d ,按Tab会列出可用分支名称