随笔-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
将本地文件夹和远程仓库关联
- 在github网页上创建一个仓库
- 本地创建和仓库名称一样的文件夹
- git init
- git remote add origin 远程仓库地址
远端新建了一个分支,本地如何切换到该分支/git切换到新的分支
先pull (会提示 new branch)<-- 要切换到新的分支, git br -a 却没有看到新的分支 先pull 再checkout
保存失败, 权限不够
看来主目录中的文件所有权被更改了。在不危害系统的情况下纠正此问题的一种方法是
sudo chown -c -R $USER:$USER $HOME
本文来自博客园,作者:LiYanbin,转载请注明原文链接:https://www.cnblogs.com/stellar-liyanbin/p/18043875
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统