git 使用总结

1.配置

// 设置全局用户信息
git config --global user.name "freedomcly"
git config --global user.email freedomcly@gmail.com

如何多账户切换?
假设一台电脑的不同项目要使用不同的 git 账号,可以配置一个比较常用的 --global 账号,然后在需要使用其他账号的项目下不加 --global 参数来配置项目内的 git 账号。

2.开发时常用操作

以下操作可以满足简单的本地文件版本管理。

// 初始化已有数据的项目,开始用 git 追踪
git init
// 克隆项目
git clone [url]

// 当前状态
git status
// git status 的简略版
git status -s

// 添加到暂存区域
git add [文件路径]

// 已修改文件与暂存区文件的差异比较
git diff
// 暂存区文件与已提交区文件的差异比较
git diff --staged

// 提交
git commit -m "something"
// 跳过 git add 并提交
git commit -a -m "something"

文件在 git 内有哪些状态?
对于任何一个文件,在 git 内都只有三种状态:已修改(modified),已暂存(staged)和已提交(committed)。
已修改→已暂存(git add)
已暂存→已提交(git commit)

3.历史记录

// commit 历史记录
// 可以根据哈希、作者、时间、代码关键字、文件路径等来查询提交
git log

// 最近两次 commit 的内容详细差异
git log -p -2

// 每次 commit 的文件信息
git log --stat

// 用合适的方式输出 log ,比如 oneline/format,format 需要加参数
git log --pretty=oneline
git log --pretty=format:"%h - %an, %ar : %s"

// 用图形方式展示,像 sourcetree 一样
git log --pretty=oneline --graph 

命令行的 git 和图形化的 git 有什么关系?
图形化的 git 是命令行 git 的子集。曾以为图形化 git 比命令行 git 的优势在于可以让分支可视化,但其实命令行的 git log 完全可以满足 sourcetree 这样的图形工具的功能,而 bitbucket / gitlab 之类的工具也仅仅是方便大家互相 review 和 merge 代码。

4.分支

分支是目前 git 中最常用的功能,极大地方便了日常程序维护与开发。
可以随时以不同的基准建立分支,同一时间在不同分支间切换,也就是在不同任务间切换,既可以修线上的 bug,也可以修开发中的 bug,还可以继续开发。

// 查看本地分支
git branch

// 删除本地分支,如果分支没有被 merge 则提示
git branch -d [分支名]
// 强制删除本地分支,如果分支没有被 merge 不提示
git branch -D [分支名]

// 已经 merge 到当前分支的分支
git branch --merged 
// 未merge到当前分支的分支
git branch --no-merged

// 切换分支
git checkout [分支名]
// 切换到新建分支
git checkout -b [新分支名]

// 合并分支,把某分支合并到当前分支
git merge [分支名]
// 分支衍合
// 分支衍合的结果与合并相同,但历史记录不同
// git pull -r
git rebase

// 把分支推送到远程仓库
git push [远程名] [本地分支名]
git push [远程名] [本地分支名]:[远程分支名]

// 删除远程分支,可以这样理解:用空白来代替远程分支
git push [远程名] :[远程分支名]

// 从远程仓库抓取数据到本地,但不会 merge 分支
git fetch origin

如何合并特定的 commit 到另一个分支
https://ariejan.net/2010/06/10/cherry-picking-specific-commits-from-another-branch/

merge 和 rebase 的区别
一言以蔽之,merge 是三方合并(两个分支的共同祖先和这两个分支),rebase 提取了一个个的 commit,把它们移动到当前分支。rebase 可以看做是 cherry-pick 的集合。
https://www.jianshu.com/p/c17472d704a0

5.远程仓库

// 创建远程仓库
git remote add [shortname] [url]

// 从远程仓库抓取数据到本地
git fetch [remote-name]

// 向远程仓库提交数据
git push [remote-name] [branch-name] 

// 从远程仓库抓取数据并 merge 到当前分支
git pull [remote-name] [branch-name]

// 查看远程仓库详细信息
git remote show [remote-name]

// 修改远程仓库名称
git remote rename [old-name] [new-name]

// 删除远程仓库
git remote rm [remote-name]

在什么情况下,同一个项目需要多个远程仓库?

6.标签

每次发布版本可以给当前位置打标签。

// 显示现有标签
git tag

// 添加含附注的标签
git tag -a [tagname] -m "something"

// 添加轻量级标签
git tag [tagname]

// 后期补标签,通过校验和
git tag -a v1.2 9fceb02 后期加注标签,校验和

// 显示标签信息
git show [tagname]

// 把标签推送到远程
git push origin [tagname]

7.其他技巧

(1) tab 自动补全
输入不完全的命令,两次 tab,可以选择可能的命令。

(2) git 命令别名
把 git 默认命令改成更简短的名称。

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

git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'

(3) 维护 .gitignore 文件
忽略开发工具、编译生成的文件等。

8.恢复数据

// 恢复已修改未暂存的文件
git checkout [文件路径]

// 恢复已暂存的文件
git reset HEAD [文件路径]

// 修改上一次提交
git commit --amend

// 恢复到任意 commit
// 也可以恢复到任意远程分支的任意文件
git checkout [哈希值]

9.开发流程

多人同时操作一个分支时,如果一个人 push 过,另一个人就要先 pull 再 push,这样很麻烦。如果是各自有不同的分支,提交后再在远程merge到主分支,就不容易出现那种情况。

(1) 两个主分支:master、develop
master 为上次已发布的稳定版本,作为修线上 bug 的基准分支。
develop 为当前开发中的新版本,任何开发完成的 feature 就可以 merge 到这个分支。

(2) 开发新功能时从 develop 分支 checkout 一个新分支 feature/[feature-name] ,修线上 bug 时从 master 分支 checkout 一个新分支 fixbug/[bug-name]。

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

推荐阅读更多精彩内容

  • 前些时间,公司产品经理针对司机端提出一个微信及支付宝二维码扫码支付需求,需求不急,但也是刚性任务,于是我在会后便火...
    devinlaffer阅读 2,866评论 0 1
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,655评论 4 54
  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,683评论 1 17
  • 系不系 很多人曾问这个用到的不多的东西!(给他一个🙄) /* 做一次老师,就该4句话般的言简意赅! 1. 每一个子...
    小专注阅读 190评论 0 1
  • 长这么大,如此茶不思饭不想还是头一次呢,杜杰冥的脑海中始终回荡着那天少年与自己耳语的画面,两千年前的预言,前提条件...
    藏在阴影里的男人阅读 365评论 0 0