git学习笔记。学习视频:黑马程序员git教程

一.概述

1.版本控制器的方式

  • 集中式版本控制工具:版本库集中存放在中央服务器,team里每个人work时从中央服务器下载代码,必须联网才能工作,局域网或互联网。个人修改后然后提交到中央版本库。(例:SVN)
  • 分布式版本控制工具:没有“中央服务器”,每个人的电脑上都是一个完整的版本库,工作时,不需要联网。多人协作只需要各自的修改推送给对方,就能互相看到对方的修改。(git)

2.git工作流程

  • clone(克隆): 从远程仓库中克隆代码到本地仓库。
  • checkout (检出):从本地仓库中检出一个仓库分支然后进行修订。
  • add(添加): 在提交前先将代码提交到暂存区。
  • commit(提交): 提交到本地仓库。本地仓库中保存修改的各个历史版本。
  • fetch (抓取) : 从远程库,抓取到本地仓库,不进行任何的合并动作,一般操作比较少。
  • pull (拉取) : 从远程库拉到本地库,自动进行合并(merge),然后放到到工作区,相当于fetch+merge。
  • push(推送) : 修改完成后,需要和团队成员共享代码时,将代码推送到远程仓库。

二.git常用命令

1.获取本地仓库

  • 创建空目录作为本地仓库。
  • git init创建本地仓库,创建完成后文件夹下可看到隐藏的git目录。

2.基础操作指令

git工作目录下对于文件的修改(增加、删除、更新)会存在几个状态,这些修改的状态会随着我们执行git 的命令而发生变化。

  • git add 工作区->暂存区(git add .所有文件添加到暂存区)。
  • git commit 暂存区->本地仓库(-m进行注释)。
  • git status 查看状态。
  • git log 查看提交日志。
    • —all 显示所有分支。
    • —pretty=oneline 显示一行信息。
    • —abbrev-commit 使得输出的commited更简短。
    • —graph 以图的形式显示。
  • git reset —hard commitID 版本回退。
  • git reflog 查看已经删除的记录。
  • 添加文件至忽略列表:创建.gitignore文件,将不需要仓库管理的文件名保存到该文件中。

3.git分支

几乎所有的版本控制系统都以某种形式支持分支。 使用分支意味着你可以把你的工作从开发主线上分离 开来进行重大的Bug修改、开发新的功能,以免影响开发主线。

  • git branch 查看分支。
  • git branch 分支名 创建新分支。
  • git checkout 分支名 切换分支 (-b 创建并切换到新分支)。
  • git merge 分支名称 分支合并。
  • git brach -d b1删除分支时,做各种检查;-D则不做任何检查,强制删除。
  • 解决冲突:
    • 处理文件中冲突的地方。
    • . 将解决完冲突的文件加入暂存区(add),提交到仓库(commit)。
  • 开发中分支使用原则与流程
    • master (生产) 分支。
    • develop(开发)分支:从master创建的分支,一般作为开发部门的主要开发分支。
    • feature/xxxx分支:从develop创建的分支,一般是同期并行开发,但不同期上线时创建的分支,分支上的研发任务完成后合并到develop分支。
    • hotfix/xxxx分支:从master派生的分支,一般作为线上bug修复使用,修复完成后需要合并到master、test、 develop分支。

三.git远程仓库

1.配置公钥

  • 生产公钥:ssh-keygen -t rsa
  • 获取公钥:cat ~/.ssh/id_rsa.pub
  • 验证是否配置成功:ssh -T url

2.远程仓库操作

  • 添加远程仓库:git remote add <远端名称> <仓库路径>,远端名称默认为origin
  • 查看远程仓库:git remote
  • 推送到远程仓库:git push [-f] [—set-upstream] [远端名称] [本地分支名][:远端分支名] 。例如:git push origin master:master
    • 远程分支名和本地分支名相同可只写本地分支名。
    • push 失败时,先尝试git pull —rebase origin master,再重新push。
    • -f 表示强制覆盖。
    • —set-upstream 推送到远端的同时并且建立起和远端分支的关联关系。
    • 如果当前分支已经和远端分支关联,则可以省略分支名和远端名。
  • 从远程仓库克隆:git clone <仓库路径> [本地目录],本地目录可以省略。
  • 从远程仓库中抓取:git fetch [remote name] [branch name]
    • 抓取指令就是将仓库里的更新都抓取到本地,不会进行合并。
    • 如果不指定远端名称和分支名,则抓取所有分支。
  • 拉取:git pull [remote name] [branch name]
    • 拉取指令就是将远端仓库的修改拉到本地并自动进行合并,等同于fetch+merge 。
    • 如果不指定远端名称和分支名,则抓取所有并更新当前分支。
  • 解决合并冲突:拉取到本地解决冲突后,再推送到远程仓库。