git使用总结

一. 常用命令

alias配置别名

  • 命令列表
shell 复制代码
git config --global alias.l log  #设置别名, 如果命令含有很多特殊字符用双引号引起来
git config --global --unset alias.l #删除别名
git config --list #查看设置的别名,以alias开头的
  • 常用别名
shell 复制代码
alias.oglog=log --oneline --graph
alias.br=branch
alias.ckot=checkout
alias.ss=status -s
alias.cm=commit -m
alias.cma=commit -am

如果想多个命令添加为一个git命令,可以用系统的alias功能,示例:

shell 复制代码
alias "git_cmA"='git add -A ; git commit -m '

add/commit添加提交

  • add
shell 复制代码
git add -u #添加改动的文件,但新文件不会添加
git add -A #添加所有文件,包含新文件
  • commit
shell 复制代码
git commit -C commitId #提交并复用指定commitId的comment
git -am 'comment' #相当于执行了git add -u和git commit -m 'comment'

branch分支管理

  • 删除分支
shell 复制代码
git branch -d branchName #删除本地分支
git push origin --delete branchName #删除远程分支
  • 和远程分支关联
shell 复制代码
git push -set-upstream origin branchName #推送当前分支到远端, 并创建分支关联
git branch --set-upstream-to origin/branchName #将当前分支关联到某远程(已存在)分支

git diff 差异对比

  • 工作区和暂存区对比
shell 复制代码
git diff #对比所有文件
git diff --path #对比指定文件
  • 暂存区和某次commit对比
shell 复制代码
git diff --cached #暂存区和HEAD对比
git diff --cached commitId #暂存区和某次提交对比
git diff --cached commitId -- path #暂存区和某次提交对比仅某个文件
  • 工作区和某次commit对比
shell 复制代码
git diff commitId #对比所有文件
git diff commitId -- path #对比指定文件

git stash

a. 命令列表:

  • 保存到stash

​ 将工作区内容存到stash, 同时恢复工作区和index区到HEAD (相当于原来的index区会直接被抹除)

shell 复制代码
git stash #将工作区暂存到stash,同时恢复工作区和index区到HEAD
git stash save -m 'comment' # 带注释
git stash --keep-index #stash时,index保持原样不被抹除
  • 查看stash
shell 复制代码
git stash list #查看stash列表
git stash stash@{0} #根据引用查看stash改动点(stash@{0}最近保存的stash)
  • 恢复stash
shell 复制代码
git stash pop <stash@{n}> #恢复到某stash, 同时在stash列表中删除,如果省略即为stash@{0},下同
git stash apply <stash@{n}>  #恢复到某stash,但不删除该stash
git stash branch branchName <stash@{n}> #基于指定stash创建分支
  • 直接删除stash
shell 复制代码
git stash drop <stash@{n}> #删除指定stash,如果省略即为stash@{0}
git stash clear #清空stash列表

b. stash使用场景:

  • 开发到一半, 需同步远程代码

git stash

git pull

git stash pop

  • 开发到一半, 做别的需求

git stash

切到其他分支做其他需求

git commit #提交其他需求

git stash pop

  • 只想提交部分文件

git add -- test.txt #将已改好的文件加入index

git stash --keep-index #将其他未改好的保存的stash

测试/修改已改好的部分

git commit #提交已改好测好的部分

git stash pop

c. 注意点

  • git stash对未track的文件无效, 先执行git add再stash才有效
  • 默认只会恢复工作区, 若要恢复index区, 恢复时添加--index

git checkout/git reset撤回

  • git checkout

git checkout 用法有很多, 回撤只是其中一种用法:

git checkout -b newBranch #创建新的分支

gi checkout commitId #修改.git/HEAD指向的指针

git checkout commitId . #从指定commitId检出所有文件并覆盖

git checkout commitId --path #从HEAD检出指定文件并覆盖

  • git reset

修改.git/ref/HEAD指向的分支的内容, 即.git/ref/heads/branchName内容的修改

shell 复制代码
git reset --soft commitId #将分支指向commitId,index和工作区不变
git reset --mixed commitId #将分支指向commitId,index会被commitId覆盖,工作区不变,相当于git reset
git reset --hard commitId #将分支指向commitId,index和工作区会被commitId覆盖

使用场景:

  1. 不想修改了, 撤回到HEAD, git reset --hard HEAD或git reset --hard
  2. 合并到一半不想合并了, git reset --mixed HEAD
  3. 合并本地的提交

git对象引用

  • 对象引用分类
  1. 直接hash引用

  2. 指针引用, 分为以下几类

    branch引用: 通过分支名指向hash, 位于.git/refs/heads目录下

    tag引用: 通过tag名称指向hash, 位于.git/refs/tags目录下

    stash引用: 通过stash@{n}引用, 位于.git/logs/refs/statsh文件里

    HEAD引用: 通过HEAD@{n}引用, 位于.git/logs/refs/HEAD文件

    commitId^父提交: 不限次数, 如commitId^^ 表示父引用的父引用, commit^2表示第二个父引用

    commitId~5: 相当于commitId^^^^^

  3. tree引用

    直接hash引用, 或者根据commitId^{tree}引用

  4. blob引用

    直接hashs引用, 或根据commitId:a.txt

    index区的文件引用, 如:a.txt

  • 查看对象
shell 复制代码
git cat-file -t 对象引用 #查看对象类型, 可能是blob,tree,commit,tag
git cat-file -s 对象引用 #查看对象大小/字节
git cat-file -p 对象引用 #查看对象内容
git rev-parse 对象引用 #根据对象引用查看其hashid, 如git rev-parse HEAD

git log

shell 复制代码
git log --oneline --graph #查看提交的轨迹
git log --name-status #查看每次提交涉及的文件, 任意git log命令加上--name-status都可

git merge

  1. 任意两个commit都能merge
  2. merge的本质是两棵树的合并,找到最晚公共分枝, 进行合并
  3. 常用git merge --no-ff commitId #将某commitId合并到当前分支

git rebase

完成格式为: git rebase [--onto <newbase>] <since> [<till>]

步骤为:

  1. 先切换到

  2. 将...(包尾不包头)所标识的提交范围写到临时文件(如果不是线性, 先since, 再till)

  3. 将分支强制充值到

  4. 将临时文件的提交按顺序逐一提交到重置之后的分支

  5. 如果提交过程有冲突

    a.解决好之后, 执行git rebase --contine

    b.执行git rebase --skip跳过提交

    c.执行git rebase --abort 终止编辑切换到变基前的分支

扩展:

shell 复制代码
git rebase -i #交互式选择

使用场景:

  1. 本地分支未push至远端, 用来合并多次提交
  2. 将个人分支合并到公共分支?

二. 常用场景

1. 仅看某文件的修改记录

shell 复制代码
git log -p path #查看某文件的每次提交及修改点
git log --oneline --graph -- path #查看修改某文件的提交

2. 将某文件回撤到某commitId

shell 复制代码
git ckot commitId --path

3. 查看指定commitId某文件的内容

shell 复制代码
git cat-file -p HEAD:a.txt
git show commitId:path/file.txt
相关推荐
int WINGsssss13 小时前
Git使用
git
用户07605303543815 小时前
Git Revert:安全移除错误提交的方式
git
Good_Starry1 天前
Git介绍--github/gitee/gitlab使用
git·gitee·gitlab·github
云端奇趣1 天前
探索 3 个有趣的 GitHub 学习资源库
经验分享·git·学习·github
F_D_Z2 天前
【解决办法】git clone报错unable to access ‘xxx‘: SSL certificate problem:
网络·git·网络协议·ssl
等风来不如迎风去2 天前
【git】main|REBASE 2/6
git
艾伦~耶格尔2 天前
IDEA 配置 Git 详解
java·ide·git·后端·intellij-idea
云兮杜康2 天前
IDEA中用过git之后文件名颜色全变红
java·git·intellij-idea
睡不醒的小泽2 天前
git merge 和 git rebase
git
艾伦~耶格尔2 天前
Git 下载及安装超详教程(2024)
git·gitee·码仓