git 常用命令

本文记录了笔者的 git 操作笔记

基本配置

  1. git init 初始化
  • git config --global user.name 'xxx'
  • git config --global user.email 'xxxxxx@xx.com'
  • git config --global color.ui auto 提高命令输出的可读性
  • 漂亮的 git log 输出形式 l = "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

基本操作

  • git add 文件名 添加到仓库
  • git status 查看状态
  • git status -sb 简单的查看状态并且显示对应分支
  • git commit -m "" 提交 -am ''
  • git rm 删除
  • git push 推送
  • git pull 获取
  • git merge --no-ff 分支名 为了明确记录下本次merge,加 --no-ff参数
  • git diff 此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异
    也就是修改之后还没有暂存起来的变化内容。
  • git show <id> 查看某次提交的修改详情
  • git commit --amend 修改本次的提交信息
  • git merge -Xours [branch] 产生冲突时,以自己的分支为准,合并代码
  • git merge -Xtheirs [branch] 产生冲突时,以对方的分支为准,合并代码

别名

  • git config alias.l log -> 设置完后 git log 可以用 git l 代替
  • alias l = "git log" l 相当于 git log
  • git config --global alias.l log 全局设置快捷键

diff

  • git diff 此命令比较的是工作目录(Working tree)和暂存区域快照(index)之间的差异
    也就是修改之后还没有暂存起来的变化内容。
  • git diff HEAD 显示工作版本(Working tree)和HEAD的差别
  • git diff --cached 比较暂存区(index)与最新本地版本库(本地库中最近一次commit的内容)
  • git diff [branchA] [branchB] > a.txt 比较分支
  • git diff [<commit-id>] [<commit-id>] 比较两次commit
  • git diff --cached [<commit-id>] [<path>...] 比较暂存区与指定commit-id的差异
  • git diff commit-id [<path>...] 比较工作区与指定commit-id的差异

log

  • git log 查看提交日志
  • git log --graph 图表形式查看提交日志
  • git log --graph 图表形式查看提交日志
  • git log --pretty=short 查看提交日志第一行
  • git log 文件名 查看某个文件的提交日志
  • git log -p <文件名> 查看<文件>提交所带来的变动

分支操作

  • git branch 查看分支
  • git branch -a -a参数 查看本地和远程所有分支的相关信息(红色是远程)
  • git branch -m master m 重命名分支名字,将master 重命名为m
  • git branch -D 分支名 删除分支、不管有没有合并
  • git branch -b 分支名 删除已经合并的分支,未合并的不给删
  • git checkout 分支名字 切换分支
  • git checkout -b 分支名字 创建分支
  • git checkout a 便可撤销对文件a的修改(在没有 add 的情况下,比如误删除某个文件)
  • git branch -v 显示所有本地分支的最后提交记录
  • git branch -vv 显示所有本地分支的最后提交记录以及对应的远程分支
  • git branch -u [远程分支] 为当前分支指定上游远程分支
  • git branch -u [远程分支] [本地分支] 为本地分支指定上游远程分支
  • git branch --track [远程分支] 在本地创建一个和远程分支同名的分支并且设为上游分支
  • git checkout -b [本地分支名称] [远程分支名称] 本地新建一个跟踪远程的分支

Note
上游快捷方式
当设置好跟踪分支后,可以通过 @{upstream} 或 @{u} 快捷方式来引用它。 所以在 master 分支时并且它正在跟踪 origin/master 时,如果愿意的话可以使用 git merge @{u} 来取代 git merge origin/master

stash

stash 意为将别的分支上未‘提交’的移到一边,然后回到主分支进行操作,因为侧分支未修改的东西也会在主分支上显示出红色未修改,相当于工作台上将某个东西放在一边处理完其他事情后再拿回来

  • git stash list
  • git stash pop
  • git stash clear
  • git stash drop
  • git stash apply

reset

  • git reset --soft 版本id 撤销修改(代码不动,版本回归)
  • git reset HEAD <file>..
  • git reset --hard 版本id 回到id的版本(代码也回到当初)

rebase

  • git rebase {master} 侧分支做了修改,主分支也做了修改,侧分支想要合并新的主分支 时候使用此命令
  • git rebase 解决冲突
    在rebase的过程中,也许会出现冲突(conflict). 在这种情况,Git会停止rebase并会让你去解决 冲突;在解决完冲突后,用"git-add"命令去更新这些内容的索引(index), 然后,你无需执行 git-commit,只要执行:
    git rebase --continue 这样git会继续应用(apply)余下的补丁。 在任何时候,你可以用--abort参数来终止rebase的行动,并且"mywork" 分支会回到rebase开始前的状态。 git rebase --abort 取消rebase
  • git rebase -i HEAD~2 将上两次的提交信息合并,其中选项为drop的操作会把那个版本所创建的文件也drop了,s就是把修改信息合并到上一个pick
    常用的对commit的操作有5种:
    p, pick = 使用此commit。(p是pick命令的缩写,两种方式均支持)
    r, reword = 使用此commit, 编辑commit message
    e, edit = 使用此commit,但是不编辑commit message,保持原有commit message
    s, squash = 使用此commit,但是合并到前一个commit中去
    f, fixup = 和squash类似,但是放弃此commit的message
    commit应用的顺序可以调整,rebase操作将从上到下执行。
    如果不使用此commit,则删除此行。
    如果所有行都被删除,则放弃rebase操作。

push

  • git push -u origin master 将当期分支的内容推送到远程origin的master仓库
  • git push <远程主机名> <本地分支名>:<远程分支名>
  • git push --delete origin devel 删除远程分支devel

pull

  • git pull origin 分支名

clone

  • git clone <remote>
  • git clone -b branch <remote>

clean

  • git clean
    -n 显示 将要 删除的 文件 和 目录 ,是一次clean的演习, 告诉你哪些文件会被删除. 记住他不会真正的删除文件, 只是一个提醒.
    -f 删除 文件,-df 删除 文件 和 目录
  • nah='git reset --hard;git clean -df' 一般这两个一起用

    git reset --hard 只影响暂存区的文件 git clean 影响未添加的文件

git revert

  • 撤销某次提交内容和 git reset 差不多,但是撤销的记录算到一次提交中去

git tag

  • git tag 列出所有的标签
  • git tag -l 'v1.8.5*' 只对 1.8.5 系列感兴趣
  • git tag -a v1.4 -m 'my version 1.4' 在 Git 中创建一个附注标签是很简单的
  • git push origin v1.5 推送一个标签到远程
  • git push origin --tags 推送所有标签
  • git checkout -b version2 v2.0.0 在特定的标签上创建一个新分支
  • git tag -d v1.0 删除

git bisect

  • 对分代码突然就无法运行,不知道那次 commit 提交出错时使用,采用二分查找,一步一步调试判断错误
  • git bisect start 开始
  • git bisect bad
  • git bisect good
  • git bisect reset 回到原来分支

git submodule

  • 当项目越来越庞大之后,不可避免的要拆分成多个子模块,我们希望各个子模块有独立的版本管理,并且由专门的人去维护,这时候我们就要用到git的submodule功能。
  • git clone <repository> --recursive 递归的方式克隆整个项目
  • git submodule add <repository> <path> 添加子模块
  • git submodule init 初始化子模块
  • git submodule update 更新子模块
  • git submodule foreach git pull 拉取所有子模块
  • 参考1
  • 参考2

删除git仓库中的大文件(包括历史中的大文件)

链接

git 打补丁

  • git cherry-pick & git cherry
  • git diff & git apply
  • git format-patch & git am
  • git format-patch 与 diff 区别 区别

ssh_key & deploy_key,说白了就相当于你有一所大别墅,SSH key能开别墅中的任何一个房间。而Deploy key只能开进别墅中的一个单间。

更多命令参数请敲 -h 查看

友链


此乃笔者笔记中的不完全记录,还会持续更新 :)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,830评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,992评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,875评论 0 331
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,837评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,734评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,091评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,550评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,217评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,368评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,298评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,350评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,027评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,623评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,706评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,940评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,349评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,936评论 2 341

推荐阅读更多精彩内容

  • 查看、添加、提交、删除、找回,重置修改文件 git help # 显示command的help git sho...
    Swiftor阅读 2,086评论 0 2
  • 配置 首先是配置帐号信息ssh -T git@github.com # 登陆 github 修改项目中的个人信息 ...
    guanguans阅读 713评论 0 3
  • git init 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当...
    後来的後来hugh阅读 232评论 0 0
  • Git常用命令总结 git init 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个...
    曾基锟阅读 250评论 0 0
  • Git常用命令总结 git init在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个r...
    錦魚阅读 163评论 0 0