Git廖雪峰教程小结

根据https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000教程整理的git学习笔记。另附Git官网地址:http://git-scm.com。w

1、创建版本库

    设置全局的姓名和email:

$ git config --global user.name"Your Name"$ git config --global user.email"email@example.com"

    初始化一个Git仓库,使用git init命令;

    添加文件到Git仓库,分两步:

使用命令git add 命令,可以用空格间隔多个文件名,添加多个文件;

使用命令git commit -m "说明信息",完成。

2、时光机穿梭

2.1 查看修改的内容

git status 查看工作区的状态可以知道哪个文件被修改;

git diff 文件名  查看该文件的修改内容,比较的是工作区和暂存区,也就是没有add时看到的改动。

2.2 在不同的版本之间切换

git log 查看过去提交(commit)的记录;

git log --pretty=oneline 一行简略查看过去提交的记录;

在过去的记录中,要注意commit id(版本号),由SHA1计算出的一个很大的数,可以通过commit id进行不同版本的切换;

git reset --hard [commit id] 切换到指定id的版本,若不产生歧义,id可以只写前几位;

git reset --hard HEAD^ 切换到当前版本的上一个版本,其中HEAD表示当前版本,一个^代表上一个版本,HEAD~100上100个版本;

git reflog 查看过去命令的记录。

2.3 管理修改

Git管理的是修改,而不是文件。

第一次修改 -> git add -> 第二次修改 -> git commit 中,因为add命令添加了第一次修改,所以只提交了第一次修改。

git diff HEAD -- readme.txt  查看add操作之后的改动。

2.4 撤销修改

1、当乱改了文件的内容,还没有add,则使用命令git checkout -- file撤销修改;

2、当乱改了文件的内容,已经add了,则使用命令git reset HEAD file撤销暂存区的修改,再回到第1步;

3、已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库(对这句话存疑)。

2.5 删除文件

1、真要删除某个文件:先通过rm删除该文件,再通过git rm file增加删除文件的修改,最后commit提交;

2、若是误删某个文件:通过git checkout -- file恢复该文件,git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

3、远程仓库

3.1 Github添加秘钥

1、创建SSH秘钥: ssh-keygen -t rsa -C "youremail@example.com",在用户目录下会有.ssh文件夹,文件夹底下有公钥文件id_rsa.pub;

2、将id_rsa.pub文件中的内容添加到Github Setting页面里的SSH Key里。

3.2 添加远程库

1、git remote add origin git@github.com:username/learngit.git;相当于为远程仓库地址取名叫origin;

2、第一次push时,git push -u origin master,-u将本地的master分支和远程的master分支关联起来;

3、后面再push时,可以直接使用git push origin master。

3.3 从远程库克隆

克隆命令:git clone git@(https//)github.com:username/learngit.git。

4、分支管理

4.1 创建和合并分支

当修改自己的代码到一半不能提交保存时,为了防止自己干了一半的东西因为异常消失,可以创建自己的分支,在自己的分支中进行修改,然后切换到主分支用merge命令合并,最后再删除自己的分支。

1、查看分支:git branch;

2、创建分支:git branch ;

3、切换分支:git checkout ;

4、创建并切换分支:git checkout -b ;

5、合并某分支到当前分支:git merge ,其中自动采用的是fast-forward模式合并的,即将当前分支指向被合并分支的最新结点。

6、删除分支:git branch -d

4.2 解决冲突

当自己分支的代码和主分支别人提交的在merge过程发生冲突,可以在文件中看到冲突的地方,然后对其进行合并,最后add commit提交合并后的内容,最后删除自己的分支(自己的分支还是在的)。

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

git log --graph --pretty=oneline --abbrev-commit  可以以图形的形式查看分支。

4.3 分支管理策略

强制禁用Fast-forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。

git merge --no-ff -m "说明信息" dev,--no-ff表示禁用fast-forward模式;

在工作中,最终上线的代码都在master分支上,具体迭代的修改在dev分支上,其他人再建立各自的分支,做出修改后提交到dev分支上,最后dev分支合并到master分支上上线完成版本迭代。

4.4 Bug分支(临时改bug)

修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除bug分支;

当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。

git stash pop:恢复的同时把stash内容也删了;

git stash apply:恢复后,stash内容并不删除;

git stash drop:删除stash内容。

4.5 Feature分支(增加新功能)

添加一个新功能时,你肯定不希望因为一些实验性质的代码,把主分支搞乱了,所以,每添加一个新功能,最好新建一个feature分支,在上面开发,完成后,合并,最后,删除该feature分支。

git branch -D 分支名:强行删除一个没有合并过的分支。

4.6 多人协作

1、git remote -v:查看远程库信息;

2、本地新建的分支不push到远程库,对别人而言就是不可见的;

3、想提交一个新的分支到github上:

(1)若该分支在github上已经有了,则使用git checkout -b dev origin/dev创建本地分支即可,该命令也会将本地分支和远程分支自动关联;或者使用git checkout -b dev先创建并切换到本地分支,再通过git branch --set-upstream-to=origin/dev建立本地dev分支和远程dev分支的联系

(2)若该分支在github上没有,则先创建本地分支,再git push -u origin dev提交分支,-u将本地dev分支和远程dev分支关联起来。

4、当别人先提交改动到dev分支上,本地就不能直接git push origin dev提交改动,先要git pull (origin dev)把别人的改动拉到本地merge,处理冲突,并commit,接着才能push。其中,需要注意的是pull并不是把远程库的文件拉过来覆盖当前文件,而是与本地文件merge合并。

PS:删除远程关联:git remote rm origin

建立远程关联:git remote add origin git@github.com:xxx/xxx。

5、标签管理

5.1 创建标签

1、commit id不好记,所以需要tag来表示某个版本,如v1.0;

2、首先切换到需要打tag的分支;

3、git tag v1.0 用于新建一个标签,默认为HEAD,也可以指定一个commit id;

4、git show 查看标签信息:

5、git tag -a -m "标签信息" 可以指定标签信息;

6、git tag -s -m "标签信息"""可以用PGP签名标签;

7、git tag可以查看所有的标签。

5.2 操作标签

1、git push origin 向远程库推送一个tag;

2、git push origin --tags 向远处库推送全部未推送的本地tag;

3、git tag -d 删除一个本地tag;

4、git push origin :refs/tags/删除一个远程的tag。

6、GitHub

参与别人开源项目的构建:

1、在GitHub上,可以任意Fork开源仓库;

2、自己拥有Fork后的仓库的读写权限;

3、可以推送pull request给官方仓库来贡献代码。

7、自定义Git

1、让Git显示颜色,会让命令输出看起来更醒目:git config --global color.ui true;

2、让git忽略某些特殊文件:

在Git工作区根目录下新建一个文件.gitignore,其中包含了所有需要忽略的文件或目录;

可以参考https://github.com/github/gitignore上的.gitignore文件进行修改;

如果想添加某个被忽略的文件:

(1)可以使用git add -f 强制添加;

(2)可以使用git check-ignore -v 查看是.gitignore文件的哪一行添加了该文件名。

3、配置别名:(如,将git status命令改为git st)

git config <--global> alias.st status;加上<--global>代表该别名全局有效,配置文件为用户目录下的.gitconfig文件。

git config <--global> alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit" 一键配置log

别名的配置不是全局的,可以在.git/config底下的[alias]标签看到;是全局的,则在用户主目录下的.gitconfig文件中可以看到。

4、建立Git服务器可以参考链接:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000

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

推荐阅读更多精彩内容

  • chapter 1: 如何创建版本库 初始化一个仓库 $ git init 添加文件到Git仓库的过程: $ gi...
    飞将军阅读 2,851评论 0 2
  • 这篇博文是自己在学习git过程中的思考总结。本文仅仅代表个人的看法,如有不妥地方还请本文文末留言。 😊 原文链接g...
    Ming_Hu阅读 1,043评论 4 18
  • Git 是目前最流行的分布式版本控制系统之一。 版本控制指的是,记录每次版本变更的内容和时间等细节,保留各版本之间...
    神齐阅读 1,384评论 0 7
  • 写在前面 有关Git的诞生故事以及Git的强大,这里无须赘述。写这篇文章的原因是因为,习惯了用Git桌面工具向Gi...
    艾伦先生阅读 549评论 0 3
  • “抽象化会让观点不易被理解,也不易被记住;抽象化还会使认与人之间的活动难以协调,因为别人可能会以不同的方式解读这些...
    huixianpenny阅读 377评论 0 0