Git在工作中的基本使用

简单介绍

Git 的工作就是创建和保存你项目的快照及与之后的快照进行对比。本文主要是针对命令行工具来介绍Git在平常工作的使用。

全局配置


配置提交后显示的用户名与邮箱

$ git config --global user.name "lxy"  
$ git config --global user.email lxy@qq.com 

配置命令别名

sudo git config --system alias.st status    #git st 查看提交状态
sudo git config --system alias.ci commit  #git ci 提交
sudo git config --system alias.co checkout  #git co 切换分支或提取代码
sudo git config --system alias.br  branch #git br 分支

查看配置

git config --list

一、基本使用


1.1 从远程仓库clone一份代码到本地,假设你桌面有个空文件夹名为:test
// 进入你要存放代码的文件夹
cd test
// 克隆代码
git clone ***.git
1.2 把所有更改过的文件添加到暂缓区
git add .  // 注意,add与.之间有一个空格
1.3 查看当前版本状态
git status  // 查看当前版本状态(是否修改)
1.4 提交代码
git commit -m "本次修改新简要说明"     // 提交
1.5 拉取远程代码,检验本地是否是最新版
git pull // 默认拉取的是你当前所在分支所关联的远程分支,如这里拉取的为 oringin master分支

拉取代码下来后,再用git status查看当前版本状态,如果有冲突或修改,改到相应的位置修改后再重复1.2-1.4步骤.

1.6 推送代码到远程服务器
git push //默认推送到的是你当前所在分支所关联的远程分支,这里是oringin master分支
1.7 查看文件哪一行是谁修改的(方便查找背锅侠)
git blame  filepath(文件路径)
1.8 暂存区缓存清除。
git rm -r --cached .  // 修改忽略文件后,执行此命令,再执行git add .这些即可

二、分支管理


2.1 查看本地分支
git branch // 显示本地分支

如下:


Paste_Image.png
2.2 查看所有分支,包括远程的
git branch -a // 显示所有分支
一个主分支master 一个develop开发分支,另一个是同事的分支
Paste_Image.png
2.3 新建本地分支
git branch 分支名 

git checkout -b 新分支名 旧分支名 如:git checkout -b 2.1.3 2.1.2 从2.1.2中新建2.1.3分支
2.4 切换分支
git checkout develop //切换到develop分支
2.5 合并分支代码
方法一:get rebase
不会生成一次新的commit去提交,直观。
git rebase master 合并分支
git rebase 提交版本号(git log或git reflog查看) // 合并别人提交的
方法二:get merge
会生成一次新的commit去提交(即,用sourceTree或git log --graph查看,会有多条线)
git merge master //合并master分支下的代码到当前分支
git merge --abort 回滚到合并前的状态

设置某一分支使用git pull时,应用的是rebase操作
git config branch.[分支的名字].rebase true
2.6 删除分支
git branch -d develop // 删除本地develop分支(本分支已修改并合并到其它分支)
git branch -D develop // 强制删除本地develop分支
git push origin:develop  // 删除远程develop分支,慎用
2.7 本地分支与远程分支关联
1.本地新分支推送到远程
git branch 本地新分支名
git push origin 本地新分支名:远程分支名 // 若远程无此分支,自动创建

2.远程分支新建到本地
// 使用下面这条,自动关联上
git fetch 远程分支:本地新建的分支名
如
git fetch origin 2.1.5:local2.1.5
git checkout local2.1.5
git branch --set-upstream-to origin/2.1.5
或者
git fetch origin 2.1.5:local2.1.5
git branch --set-upstream-to origin/2.1.5 local2.1.5 // 一句完成,不用切分支
2.8 克隆远端分支到本地
git clone git仓库地址 本地文件夹名 -b 分支名
如:
git clone xxx.git appios213 -b 2.1.3 // 会在你当前目录下创建一个appios213文件夹,然后克隆2.1.3版本到这个文件夹中
2.9 抓取远程分支到本地别的分支

git fetch 远程分支:本地新建的分支名

如:
cd 2.1.5文件夹
git fetch origin 2.1.3:2.1.3

// 如果是在2.1.5中执行这条,则本地会有2.1.3与2.1.5两个本地分支

2.10 查看分支的最后一次提交log
git branch -v 

三、版本备份


版本备份也就是打标签。

3.1 查看标签
git tag  // 显示已存在的tag
3.2 增加tag标签
git tag -a v4.6 -m '4.6发布版本'     // 增加v4.6的tag
3.3 推送标签到远程服务器
git push --tags           // 推送所有的tag到远程服务器
3.4 删除远程tag
git push origin :refs/tags/0.0.1 // 删除远程tag
3.5 根据标签拉取代码
git checkout v4.6 // 把4.6发布的版本拉出来,这样可以做到定位版本修改bug

四、版本回退


4.1 本地回退
1.打印本地提交的记录   
git log
2.记录每一步的叫什么
git reflog
3.回退到commit前一步,即取消commit操作
git reset --soft [版本号]
4.回退到你复制出来的版本记录(本次的commit后的均消失)
git reset --hard [版本号]  // 这里的版本号为commit后面一串数字
4.2 远端回退
如果远端你也要一起回退,这时可以用上面的方法先本地回退好,然后强制push当前版本到远端即可
git push --force
4.3 快速回退一些命令
1. 回退所有内容到上一个版本
git reset head^
2. 回退某一个文件到上一个版本,如回退delegate.m文件
git reset head^ delegate.m
3. 向前回退到第3个版本
git reset --soft head~3
4. 将本地的状态回退到与远程的一样
git reset --hard origin/master

git reset --hard [commitId] 回滚上次提交,且工作,暂存区域都回滚
git reset --soft [commitId] 把高于指定的提交的内容回退到暂存作区域,即只回退了commit操作
git reset --mixed [commitId] 把高于指定的提交的内容回退到工作区域(默认),即回退了add与commit两个操作

五、Git的高级用法

出现误操作

git reflog #记录每一步操作
git reset [commited]

找到问题的背锅者

git blame [filePath]

cherry-pick的使用:合并某次commit。

git cherry-pick <commit id> // 只合并某一次或某几次的提交
// 例如
git cherry-pick e71f9ae29a32ddc22d401cbed7db1210a3d60881

因为git中把commit删了后,并不是真正的删除,而是变成了悬空对象(dangling commit)。我们只要把把这悬空对象(dangling commit)找出来,用git rebase也好,用git merge也行就能把它们给恢复。

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

推荐阅读更多精彩内容