Git在工作中的小总结

Git-Pro

自己在工作中常用的git命令行!

<a name="basic">Git基本操作</a>

用户信息

当我们要进行Git提交的时候,我们作为提交者要以什么姓名和电子邮件地址进行提交?

git config --global user.name "DefaultYuan"
git config --global user.email johndoe@example.com

查看配置信息

git config --list

上面命令配置好的用户信息可以通过git config --list命令查看用户名、邮箱、别名、remote地址等等!真是一览无遗!当然也可以到.git目录下的查看config文件

从现有的仓库克隆到本地

git clone https://github.com/DefaultYuan/Git-Pro.git A/B

以上命令是将现有的仓库克隆到A目录下的B文件夹里面,如果后面没有添加A/B就会默认新建一个名为Git-Pro文件夹,且将仓库克隆到这个文件夹下面!

提交代码到本地仓库

当我们在本地修改了文件,比如修改了README.md文件,我们首先查看状态确定哪些文件当前处于什么状态!

git status

该命令执行完终端输出如下:

On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

当前README.md文件是有做修改的,该文件还没有添加到stage的,提示我们可以通过git add <file>来添加,当然我们也可以通过git checkout -- <file>来撤销本次做到修改,建议不要轻易这么干!后续我会讲讲相关撤销操作。

现在我们加入stage

git add README.md

如果我们现在要将本地所有修改的文件进行添加,可以用该命令:

git add .

最后,我们进行提交

git commit -m "fix 具体哪个功能"

如果本地我们改的内容有点多,涉及到修改多个模块的代码,建议多次添加并提交!

将本地代码提交到远程仓库

继上面的提交操作之后

我们先拉取一下远程仓库的更新内容

git fetch

接下来,我们就可以手动merge远程仓库的修改了

git merge

我们为了让我们的提交记录比较美观一些的话,在这里我们会用rebase去代替merge操作

git rebase

或者用pull来拉取代码

git pull

fetchpull有啥区别呢?

fetch从远程仓库抓取到本地之后不会自动merge操作,但pull会自动merge

最后我们进行push操作

git push

这样我们就可以做到远程仓库和本地仓库的同步了!


Git进阶

上面讲的是一些Git基本操作

接下来讲讲一些Git进阶小技巧

提交技巧

当我们要将stage里的修改分多次提交到本地仓库,也就是具体到哪个文件
git commit DefaultYuan.txt -m "fix 具体功能"
如果我们想查看要提交的内容与版本库中的比较,然后进行提交
git commit -v
将工作区和stage中的所有修改的文件一次性提交到本地仓库
git commit -a

这样会默认使用 vi 添加描述,我们也可以在.git/configcoreeditor = vim指定编辑器

当然也可以使用-m选项直接添加提交信息

git commit -a -m "fix 具体功能"
有时候我们需要对上一次提交信息进行修改
git commit --amend

也可以后面添加参数-m做到修改

查看状态

查看工作区中所有目录下文件的变动
git status
比较工作区与暂存区的改动
git diff
添加参数--cached,比较暂存区和版本库之间的区别
git diff --cached
添加参数HEAD,比较工作区、暂存区和版本库之间的区别
git diff HEAD

HEAD关键字它指的是当前分支的最新提交,相当于一个指针,后续讲到新建分支也会提到它

stash的使用

有时候我们在工作区进行开发并且不想提交的时候,这时我们又想pull最新代码;或者又想切到另外一个分支上修改紧急bug的时候

git stash可以暂存当前的工作区内容

可以先暂存当前的工作区的内容
git stash

等我们切到另外分支修改完了bug之后,可以切回之前分支

然后恢复之前工作区的内容继续开发
git stash pop
也可以查看stash的Git栈信息
git stash list

当我们的stash栈列表里面有很多,并且我们想要找到对应的版本号

并且将我们想要的版本号为stash@{2}的工作内容取出来
git stash apply stash@{2}
也可以查看版本号为stash@{2}的工作内容
git stash show stash@{2}

当我们的stash栈列表的工作内容都应用回来的时候

可以将栈清空
git stash clear

分支

分支在Git里面是比较廉价的,我们在开发的时候可以在本地仓库创建很多条分支

新建一条名字为dev的分支
git branch dev

这种创建方式会依然停留在当前分支

开发新功能、或者修改bug,我们会创建一条分支并切到新开分支上开发
git checkout -b dev_fixHot
也可以从当前分支新建一个dev分支,指向指定commit
git branch dev f0299e2

f0299e2是随便写的,具体要以我们自己的commit

切换到指定分支
git checkout dev

分支其实也是指向某个commit的指针,HEAD也是一个指针,它指向当前工作目录下的commit

因此checkout就是让HEAD指向dev分支

删除dev分支
git branch -d dev
强制删除dev分支
git branch -D dev
将本地dev分支与dev_fixHot远程分支建立追踪关系
git branch --set-upstream dev origin/dev_fixHot
添加一个dev远程分支
git push origin dev:dev
删除dev远程分支
git push origin :dev

或者

git push origin --delete dev
选择一个commit,合并到当前分支
git cherry-pick f0299e2

合并分支rebasemerge

在工作中,如果团队开发同一个项目的人数特别多的时候,每个人都在自己的分支上开发

在开发过程中,为了使提交记录直观,方便在一条分支上查看提交记录,可以对分支进行衍合,一般是在做了一些小的修改之后会用它

将修改commit到本地分支上之后

当本地分支上有相对应的远程分支,可以直接使用

git rebase

为了方便讲解,origin/dev_homepageFix这个远程分支是随便写的分支名

当这次commit要衍合到dev_homepageFix分支上时

git rebase origin/dev_homepageFix

最后就可以push跟远程仓库同步了

当我们到项目接近尾声的时候,需要将各自的分支都合并到dev分支上去

先抓取最新仓库更新

git fetch

然后切到dev分支上

git checkout dev

再分别合并各个分支,这里以dev_homepageFix分支为例

git merge origin/dev_homepageFix

撤销操作

当我们想去整理我的提交,或者是把不该这次提交的修改提交了,我们可以对修改进行撤销,或者对提交进行撤销

恢复暂存区的所有文件到工作区
git reset HEAD
恢复暂存区的指定的某个文件到工作区
git reset HEAD README.md

我们做了一些修改,然后觉得自己做错了,不想提交

可以重置暂存区、工作区,这样就能与上次提交保持一致,建议不要轻易这么做!
git reset --hard

当我们想重新整理提交的时候,比如说将上两次的提交整理到一次提交,我们可以重置到上两次的上次提交commit

可以重置到指定的commit,并重置了暂存区,但工作区是不变的
git reset 2126dce

这种情况也会引发另外一个问题,当我们本地仓库与远程仓库一致的时候,然后我们重置,就需要用到pushforce来进行强推,这是我们不想操作的,后续我会讲解一下强推的小建议!

新建一个commit,用来撤销指定commit,后者所有变化都会被前者抵消,并应用到当前分支

我们也是不要轻易这么去做!

git revert 2126dce

起别名

当我们有比较常用的命令行用的比较频繁,但是我们又觉得完整把它们敲出来费事

可以在 ~/.gitconfig 文件里面进行设置别名,添加alias
[alias]
ft = fetch
ck = checkout
st = status
br = branch
rb = rebase
lg = log

然后试一下git st就管用了!

标签的相关操作

标签可以针对某一时间点的版本做标记,常用于版本发布

列出标签
git tag
创建附注标签
git tag -a v0.0.1-pro -m "pro发版"
切换到标签
git checkout v0.0.1-pro
查看标签的版本信息
git show v0.0.1-pro
删除标签
git tag -d v0.0.1-pro
给指定的commit打标签
git tag -a v0.0.1-pro 9fbc3dd
将v0.0.1-pro标签提交到git服务器
git push origin v0.0.1-pro
将本地所有标签一次性提交到git服务器
git push origin –tags

找回Git中丢失的Commit

在使用Git的过程中,有时候会因为一些误操作,比如reset、rebase、merge等,同时自己的Commmit记录也消失了。
不用慌,我们在Git上做的任何操作都只是在原来之前的操作上做修改,并且会被记录下来保存,也就是说无论你做了什么,对于Git来说都可以进行回滚操作。

找回Commit
这里以git reset --hard为例,如果我们这样操作,提交会消失。
这时我们可以使用reflog查看一下
git reflog
此时会出现这样

99abc5a HEAD@{1}: commit: do something

我们要找回我们这个commit,只需要做如下操作:
git reset --hard 99abc5a
针对不是git reset --hard误操作造成的丢失commit,我们可以使用git cherry-pick 99abc5a来找回代码,核心是我们需要找回丢失的commit

微博:DefaultYuan
最新更新请戳这里

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

推荐阅读更多精彩内容

  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,579评论 4 54
  • Git是目前最流行的版本管理系统,也是最先进的分布式版本控制系统(distributed version cont...
    pro648阅读 5,582评论 1 17
  • 昨天我去体检了, 今年单位的例行体检比从前多了一个项目: 验便。 对这突如其来的福利, 大家好像都没什么准备, 多...
    石小露阅读 951评论 0 3
  • 在后台,经常会收到如下这些留言: A先生问,扭腰时,为什么会响? B女士说,上下楼梯时,膝盖咔咔响,是怎么回事? ...
    WELL运动康复阅读 818评论 0 0
  • 我拖着行李箱走出来,一眼就看见了人群中张望的你,突然你望向我,露出了孩子般的笑容,还不停的挥手示意我。 不知道为什...
    rainbow姗阅读 92评论 0 0