git学习笔记

 1.创建版本库
 2.版本创建与回退
 3.分支管理
 4.使用github
 5.使用git

1. 创建版本库

  本文基于linux系统。首先是安装git:

sudo apt-get install git

  假如我想要通过git来管理某一目录下的代码,首先要创建一个版本库(通过git init命令,目录下将会多出一个文件.git),git将借助.git管理该目录下的代码:

mkdir git_study
cd ./git_study/
git init

2. 版本创建

(1)创建一个版本
  在git_study/目录下创建一个代码文件,假设我们要管理这个代码文件,通过下述命令创建一个版本,v1是指版本信息,自己填写:

git add test.txt
git commit -m 'v1'

(2)查看版本记录

git log


(3)版本回退
  在创建新版本时,并不是拷贝了一份前面版本,而是基于前面的版本进行修改,并记录。当前版本由HEAD指向,前一版本为HEAD^HEAD~1,前二版本为HEAD^^HEAD~2,其他类推。

  版本回退命令为:

 git reset --hard HEAD^

  回退后,版本2并没有删除,可根据版本编号回到版本v2:

 git reset --hard 74898339a5bb14980d902ca5e72adc84196a3af2

  如果命令窗口关闭,找不到版本编号,则使用git reflog可找到操作记录

(4)工作区和暂存区
  ①工作区:指电脑中的目录,即需要git来管理的目录,如前述git_study/
  ②版本库:工作区内的隐藏目录.git


  现对工作区做如下修改:修改test.txt文件,创建新文件test2.txt,通过git status命令查看git工作状态,得到如下提示(修了文件,有一个文件未跟踪):

  通过git add test.txt test2.txt命令(后面可跟多个文件名或目录名),将文件添加到暂存区后,即可创建新版本,一旦提交创建新版本后,将会获得干净的工作区(status内无内容)

(5)管理修改
  git创建版本时只会提交暂存区的修改,即所有的修改要先提交到暂存区,否则不会变更到新版本中。

(6)撤销修改
  通过命令git checkout -- test.txt 来撤销工作区的改动(撤销的是指作出了修改,但未提交到暂存区)。
  如果已经加入到暂存区,则通过命令git reset HEAD test.txt来取消暂存,回到提交暂存之前(文件已修改,但未提交暂存,status显示有修改为提交暂存)。

(7)对比文件的不同
  ①对比工作区文件和版本的不同,首先对工作区中文件进行修改,但不提交到暂存区,比较该文件与版本不同,通过命令git diff HEAD -- test.txt实现:


  ②对比两个版本之间的区别,命令git diff HEAD HEAD^ -- test.txt

注:比较的基准是diff 后面跟的这个版本,加号表示相对这个版本多出什么,减号则代表少了什么。

(7)删除文件
  当将工作区文件删除时,git status将会改变,提示通过git add/rm 文件名来将删除操作更新至暂存区,或git checkout -- 文件名来撤销删除操作;如果已将删除更新至暂存区,想要撤回则通过前述撤销修改操作来撤销删除。如果确认删除则创建新版本。

3. 分支管理

(1)基本操作
  当创建一个属于自己的分支,别人看不到,还在原来的分支上正常工作,而你在自己的分支上工作,想提交就提交,不会影响到别人干活,直到开发完毕后再一次性合并到原来的分支上。前述的操作都是在一个分支上进行操作的,这条分支叫主分支(master)。严格来说,HEAD是先指向分支,由分支再指向版本。
  在创建分支时,先创建了一个指针指向版本,master指向版本不动,但你的HEAD将指向分支,当你作出修改时,创建的分支向新版本移动,master依然保持不变。当合并时,则将master指向了创建的分支所指向的版本,然后删除创建的分支即可。

①查看有多少分支命令:git branch
②创建一个新的分支(假设名为dev),并切换到该分支上:git checkout -b dev,当再修改工作区并创建新版本时,将是在dev分支上进行:


③切换分支:git checkout master,此时再查看操作记录时,将不会有dev的版本记录
④将dev合并到主分支:git merge dev,如果允许将以快速合并的方式进行(但不是所有的都可以快速合并,后面叙述):

⑤删除dev分支:git branch -d dev

(2)合并分支冲突的解决
  如果在创建新分支后,在新分支上作出修改,然后跳回主分支,但没合并,而是在主分支上又提交了一个版本,此时如果直接将dev分支合并到主分支将会出现冲突问题:

  vim打开发生冲突的文件后将提示在哪里出现冲突:
如果手动解决冲突,则在vim中删除提示符,并进行修改,退出vim,提交新版本即可。

(3)分支管理策略
  通常,合并分支时,如果可能,git会以快速合并的模式来合并,但有些快速合并虽然不冲突,但也不能成功,此时git会自动做一次新的提交,但是在删除分支后会丢失分支信息。
  如在dev分支中创建新文件,在master分支中对另外一个文件进行修改,此时是不冲突的,直接合并将弹出下拉框,想要在下拉框中输入版本描述信息:

最后发现,版本顺序是在master修改文件的版本后又添加了一个合并dev的版本。

禁用快速合并:git merge --no-ff -m '描述‘ dev
(4)bug分支
  如果当你在自己的分支上进行工作时,此时需要修复主分支的bug时,但此时你的工作还未完成,不能提交合并。如果查看status时,发现有修改未提交,那么需要通过命令:git stash将你的工作保存起来,此时status是干净的,再去切换到主分支进行修复,修复合并完成后,再跳回你的工作分支,通过命令git stash list列出之前保存的工作,通过git stash pop将工作还原。

4.使用github

(1)github创建仓库
  首先在github创建一个账号登录,选择新建仓库:


(2)github添加SSH
  如果需要某台电脑与github上的仓库进行交互,那么需要把这台电脑的ssh公钥添加到这个github账户。
  初次配置git用户名和密码时,通过下述命令来配置:

git config --global user.name "your user name"
git config --global user.email "your user email"

  如果已有,需要修改或查看,在家目录下通过命令 vim .gitconfig来编辑
然后通过下述命令来生成ssh:


进入.ssh/文件夹,可以看到生成了两个文件,分别为私钥和公钥:

最后通过cat查看公钥,复制公钥到github网站设置里:

(3)github克隆项目
  通过命令执行克隆:

git clone 项目地址

如果克隆出错,执行下述命令后再克隆:

eval "$(ssh-agent -s)"
ssh-add

(4)github推送代码
  项目代码克隆完成后,一般不是直接开发,而是创建一个新的分支进行开发,当开发完成后,需要将你工作推送到github则执行:

git push origin 你的分支名称

(5)将本地分支跟踪服务器分支
  用于比较两个分支是否有差异

git branch --set-upstream-to=origin/远程分支名称 本地分支名称
git status

(6)拉取服务器分支代码

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

推荐阅读更多精彩内容

  • Git教程 一、Git简介 1.1. Git的诞生1.2.集中式的vs分布式 二、安装Git 三、创建版本库 四、...
    曹渊说创业阅读 909评论 0 2
  • 0. 前言 git在团队协作中有重要作用,是有必要进行系统学习的一门工具。本篇是笔者学习git操作的备忘笔记,主要...
    dounine阅读 924评论 0 2
  • ----------------- Git 学习 ------------------ Git 简介 Git...
    Junting阅读 2,199评论 0 3
  • 一、常用终端指令 $ pwd用于查看当前目录 $ mkdir learngit 创建一个名为learngit的空目...
    天山雪莲_38324阅读 388评论 0 1
  • git学习笔记 声明 本文是本人学习Git过程中所做的笔记,以便日后查阅,文中多有错漏之处,不建议用作学习材料,文...
    sayonara_yoyo阅读 653评论 0 1