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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

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