随笔-git-常用记录

常用配置

config的三个作用域

config 配置有:system级别(不常用) global(用户级别) 和local(当前仓库)。三个设置先从system->global->local 底层配置会覆盖顶层配置
分别使用--system/global/local 可以定位到配置文件

# 查看当前所有配置
git config --list

# 查看系统config
git config --system --list

# 看当前用户(global)配置
git config --global  --list

# 查看当前仓库配置信息
git config --local  --list

配置user.name user.email信息

git config --global user.name 'your name'
git config --global user.email 'your email'

设置命令别名

git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

忽略文件权限的跟踪(core.fileMode)

git config core.filemode false // 当前版本库
git config --global core.fileMode false // 所有版本库
git config list

常用操作

从github clone仓库A,将仓库A作为新的仓库提交到gitlab

git clone https://github.com/xxx/r1.git --mirror /data/products/r1
git remote set-url origin git@gitlab:xxx/r1.git
git push --mirror origin

git patch 生成补丁方式

方式1:git diff

git diff -p --ignore-space-at-eol --ignore-cr-at-eol > patch.diff # --ignore-cr-at-eol GB28181

方式2:git format-patch

新建一个分支,然后代码提交,然后使用git format-patch 生成patch

git format-patch HEAD~1

方式3:git stash 然后 git stash show stash@{0} -p > xxx.patch

应用补丁的方式:

git apply --reject --whitespace=fix -p0 patches/rtc/rtc_patch_all_lib.patch

参考:Git 导出 stash 备份为 patch 文件 - alps2006的文章 - 知乎

git stash

# stash文件
git stash save --include-untracked '..'

# 列出所有stash
git stash list

# 获取并删除暂存项
git stash apply stash@{1}
git stash drop stash@{1}
# ……或使用一条命令……
git stash pop stash@{1}

git log

git log --oneline # 只显示提交ID和提交信息的第一行
git log --graph --oneline --decorate  # 绘制一个 ASCII 图像来展示提交历史的分支结构,星号表明这个提交所在的分支
git log --pretty=format:"<|${module}>>>%h>>>%ad>>>%s>>>%cn" --no-merges --graph $l_commit...$commit

git log --after="2020-01-01 00:00:00" # 通过时间过滤
# --since=<date>, --after=<date>
#    Show commits more recent than a specific date.
# --until=<date>, --before=<date>
#    Show commits older than a specific date.

git log --grep="GB28181"  # 查找提交记录,也可以传入 -i 参数来忽略大小写匹配

git log 查看函数变更历史

例如,要查看 path/to/file.c 文件中名为 myfunction 的函数的变更历史,可以使用以下命令:

git log -L :myfunction:path/to/file.c

git commit

修改本地提交日志(编辑上次提交日志)

git commit --amend -m "更好的提交日志"

在上次提交中附加一些内容,保持提交日志不变

git add . && git commit --amend --no-edit

空提交 —— 可以用来重新触发 CI 构建

git commit --allow-empty -m "chore: re-trigger build"

git diff

查看要提交的内容

如果还没有add: git difftool -x bcompare
如果已经git add加入到暂存区:git difftool --cached -x bcompare

-W 显示整个函数的修改

git diff 默认显示修改位置的前后几行

-W, --function-context
          Show whole surrounding functions of changes.

导出修改的文件

git diff --name-only | xargs -I {} cp --path {} diff_file/

git 回退/撤销

回退commit到本地的内容

git reset --soft HEAD^

撤销pull/merge

git reflog
git reset --hard HEAD@{1}

git cherry-pick dev分支有多个提交,但只想把dev的某个提交提交到release

切换到release
git cherry-pick fccb733753d2e55345cbacf10c7aa6c0381eda5e(直接是dev分支的commint-id)

git branch

git branch --set-upstream-to=<远程>/<分支> 本地分支 # 修改关联的远程分支名称

git branch -m branch-name new-branch-name # 修改分支名称

git branch -D branch-name # 删除分支

git checkout

放弃本地修改 将某个文件(或文件夹)恢复成和远端的一样

git checkout 文件名称
git checkout . # 恢复成和远端的一样

旧版本有bug,要排查,可当前代码是最新的,怎么回到对应版本的那个历史代码

git checkout commint-id
不用后要返回 git checkout 分支名称

git blame 显示文件某一行的修改是谁修改的

查看某一分支是什么时候创建的

git reflog show --date=iso branch-name

不常用用法

合并多个提交(连续or不连续)

场景:多次提交到本地,但是提交到远程仓库的时候,希望把多个提交合并为一个提交

git rebase -i HEAD~2  # 这个命令,将最近2个commit合并为1个,HEAD代表当前版本。
git rebase -i commit-id # 这个命令,表示从commit-id到HEAD

从旧到新从上往下排列,最新的提交在最底下,当前只要知道 pick 和 squash 这两个命令即可

# --> pick 的意思是要会执行这个 commit
# --> squash 的意思是这个 commit 会被合并到前一个commit
# 我们将 需要修改的 这个 commit 前方的命令改成 squash 或 s,然后输入:wq以保存并退出
# 如果想要合并的是不连续的,移动相应的行的位置

例如:

#     pick commit-01
#     pick commit-02
#     pick commit-03

合并commit-01和commit-03,则

#     pick commit-01
#     s commit-03
#     pick commit-02

wq退出后,如果没有冲突,Git工具会自动打开一个 commit message 的编辑界面,其中, 非注释部分就是两次的 commit message, 修改成你想要的 commit message。输入wq保存并退出, 再次输入git log查看 commit 历史信息,你会发现这两个 commit 已经合并了。
如果有冲突,解决冲突,根据提示提交修改的内容,然后执行git rebase --continue

交互式变基操作正在进行中;至 39a48e8
没有命令被执行。
接下来要执行的命令(剩余 7 条命令):
   fixup 9b95362 [DEVELOP, release-v3.2.2.x, ...] 代码审查修改
   pick 4daa985 [BUG-T, release-v3.2.2.x, include]修改...
  (使用 "git rebase --edit-todo" 来查看和编辑)
您在执行将分支 'release-v3.2.2.x' 变基到 '39a48e8' 的操作时编辑提交。
  (使用 "git commit --amend" 修补当前提交)
  (当您对您的修改满意后执行 "git rebase --continue")

附:基本使用

创建第一个仓库并(可选:配置local用户信息)

两种场景:

1、把已有的项目代码纳入Git管理

cd 项目所在的文件夹
git init

2、新建项目同时直接用git管理

cd 某个文件夹
git init your_project # 会在当前路径下创建和项目名称同名的文件夹
cd your_project

可选-配置local信息(大于global配置)
直接git config --local -e 会打开一个编辑器,修改保存即可

提交修改到本地

工作目录 --(git add)--> 暂存区 --(git commit)-->版本历史

提交到远程仓库(使用 SSH 连接到 GitHub)

1、检查现有 SSH 密钥
2、生成新 SSH 密钥并添加到 ssh-agent
3、新增 SSH 密钥到 GitHub 帐户
4、测试 SSH 连接

完整介绍参考:https://help.github.com/cn/github/authenticating-to-github/connecting-to-github-with-ssh

附:ssh原理以及与https的区别
参考:https://www.cnblogs.com/dzblog/p/6930147.html

clone远程的仓库

安装git->配置ssh连接GitHub->git clone

本地新建了一个分支,如何push到远端

直接push

将本地文件夹和远程仓库关联

  1. 在github网页上创建一个仓库
  2. 本地创建和仓库名称一样的文件夹
  3. git init
  4. git remote add origin 远程仓库地址

远端新建了一个分支,本地如何切换到该分支/git切换到新的分支

先pull (会提示 new branch)<-- 要切换到新的分支, git br -a 却没有看到新的分支 先pull 再checkout

保存失败, 权限不够

看来主目录中的文件所有权被更改了。在不危害系统的情况下纠正此问题的一种方法是

sudo chown -c -R $USER:$USER $HOME
posted @   LiYanbin  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
点击右上角即可分享
微信分享提示