git学习笔记

GIT学习笔记

1、git 安装 以及初始配置

  • 安装
    sodu apt-get install git
  • 配置
    $ git config --global user.name "jacklin"
    $ git config --global user.email 361525737@qq.com

2、创建版本库

  • 创建版本库(仓库)文件

      mkdir jacklingit  //创建git文件夹
      cd jacklingit    // 打开
      pwd              // 查看当前目录
    
  • 通过 git init 命令把这个目录编程可以管理的仓库

    $ git init
    Initialized empty Git repository in /Users/michael/learngit/.git/
    

    这个时候当前目录多了一个.git的文件,这个目录是Git来跟踪管理版本库的,不能手动修改。

  • 现在编写一个test.txt的文件放到jacklingit目录下,并通过git.add告诉git,把文件添加到仓库,然后通过git commit命令告诉git 把文件提交到仓库。

    $ git add test.txt
    $ git commit -m "wrote a test file"
    

    这里的 commit -m 中 -m后面跟的是说明性质文字,可以是任意内容,但最好是有意义的。为什么需要add和commit 两步?因为 一次性可以commit多个文件,可以多次添加,一次提交。

3、修改记录

假如现在对test.txt进行部分修改

  • 用git status查看修改状态,用 git diff 来查看具体做了哪些改动

    $git status
    $git diff
    

看到具体改动之后我们才可以放心提交

  • 想开始一样,用 git add 和 git commit 添加和提交

4、版本回退

  • git log 命令显示由近到远的版本日志,包括时间、日期、作者等,如果想查看精简版本 可以使用 git log --pretty=oneline 命令

    $git log
    $git log --pretty=oneline
    
  • 假如这个文件提交过100次,那就有100个版本,使用git reset命令退回到指定版本

    $ git reset --hard HEAD^      //退回到上一个版本
    $ git reset --hard HEAD^^     //退回到倒数第二个版本
    $ git reset --hard HEAD~50    //退回到往前数50个版本
    

    然后通过 cat test.txt来查看当先版本是否时候操作后的版本

  • 这个时候通过 git log命令来查看版本日志,发现版本记录也彻底回到了原来50版本对应的日志,那么如何再退回到没有进行版本退回之前的最新版本?假如操作窗口还没有关闭,往上找到最新版本的版本号,假如是00000,执行 git reset --hard 00000
    $ git reset --hard 00000

  • 假如连commit id 也找不到怎么办? git reflog 命令可以查看你的每一次命令,然后知道commit id 就OK了

head 是git 的版本指针,设定哪里,版本指针就会指向哪里,所以恢复速度很快

5、工作区和暂存区

  • 工作区就是我们文件存放的区域,比如前面创建的jacklingit这个文件夹
  • 被我们创建的版本库文件里面都会有一个.gitd的文件(隐藏目录),这是git的版本库,版本库里面成怒了很多东西,其中最重要的就是暂存区(stage).
  • git为我们自动创建了一个分支master以及指向master的指针HEAD.
  • 文件提交的两步 git add就是把文件添加到暂存区,git commit就是把暂存区的文件提交到当前分支。

6、管理修改

  • git管理的不是文件,而是修改。
  • 当你没有将修改add到暂存区的话,commit是无效的。

git diff HEAD --test.txt //查看文件的修改

7、撤销修改

  • 当你该乱了工作区某个文件的内容,想直接丢弃工作区的修改

    $ git checkout --test.txt
    
  • 当你不但该乱了而且add到了暂存区

    $ git reset HEAD test.txt
    $ git checkout --test.txt
    
  • 当你不但放到了暂存区而且commit了,那就退回到上一个版本

    $ git reset  HEAD^
    

8、删除文件

  • 删除文件

    $ rm test.txt    
    
  • 这时工作区和暂存区的文件内容就不一致了,如果你要一并删除暂存区的对应文件,并且提交
    $ git rm test.txt
    $ git commit -m "remove test.txt"

  • 另一种情况时候误删,就用checkout恢复
    $ git checkout -- test.txt

文件一旦提交到版本库,就永远不用担心误删,但时候要小心,最后一次修改的内容会丢失。

9、远程仓库

  • 远程仓库的建立
    $ ssh-keygen -t rsa -C "361525737@qq.com"
    在用户目录输入命令之后一路回车,这时候有个.ssh的文件(可能是隐藏的),打开后里面有三个文件,其中一个是id_rsa.pub,打开然后复制里面的内容到github的SSH key中。
  • 在github中建立与本地版本库同名的repository,就成功地创建了一个新的Git仓库
  • 输入命令使本地版本库和远程库连通
    git remote add origin git@github.com:361525737@qq.com/jacklin.git
  • 下一步,就可以把本地库的所有内容推送到远程库上:
    $ git push -u origin master
    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。

10、从远程库克隆

  • 登录github建立一个新的仓库 名字叫gitskills,勾选Initialize this repository with a README,这样GitHub会自动为我们创建一个README.md文件。创建完毕后,可以看到README.md文件

  • 然后克隆一个本地库
    git clone git@github.com:Jacklin1992/gitskill.git

    如果有多个人协作开发,那么每个人各自从远程克隆一份就可以了。

    11、创建与合并分支

    查看分支:git branch
    
    创建分支:git branch <name>
    
    切换分支:git checkout <name>
    
    创建+切换分支:git checkout -b <name>
    
    合并某分支到当前分支:git merge <name>
    
    删除分支:git branch -d <name>
    

12、合并冲突

  • 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
  • 用git log --graph命令可以看到分支合并图。

13、分支管理策略

  • master分支是稳定分支,只用来发布新版本,不能再上面操作,工作配合都是在dev上完成,每个人将自己的分支不时的合并到dev上即可。

14、BUG处理

  • 当修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
  • 当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
    $ git stash
    $ git stash pop

15、feature分支

  • 开发一个新feature,最好新建一个分支
  • 如果要丢弃一个没有被合并过的分支,可以通过git branch -D <name>强行删除。

16、多人协作

  • 查看远程库信息
    $git remote -v
  • 本地新建的分支如果不推送到远程,对其他人就是不可见的
  • 从本地推送分支,使用git push origin branch-name,如果推送失败,先用git pull抓取远程的新提交
    $git push origin branch-name
    $git pull
  • 在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致
    $git checkout -b branch-name origin/branch-name
  • 建立本地分支和远程分支的关联,使用git branch --set-upstream branch-name origin/branch-name
    $git branch --set-upstream branch-name origin/branch-name
  • 从远程抓取分支,使用git pull,如果有冲突,要先处理冲突
    git pull

参考资料
阮一峰

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

推荐阅读更多精彩内容