180630 Git

概述

Git支持多种协议:
ssh git@github.com:michaelliao/gitskills.git
https https://github.com/michaelliao/gitskills.git

Git行为:
git remote 远程与本地
git branch 分支
git merge 合并
git push 推送

概念:
FETCH_HEAD: 是一个版本链接,记录在本地的一个文件中,指向着目前已经从远程仓库取下来的分支的末端版本。
commit-id:在每次本地工作完成后,都会做一个git commit 操作来保存当前工作到本地的repo, 此时会产生一个commit-id,这是一个能唯一标识一个版本的序列号。 在使用git push后,这个序列号还会同步到远程仓库。


Git生产环境常用命令

在这里插入图片描述

协作开发

-创建本地仓库

git init

-关联本地仓库与远程仓库

git remote add origin <url>

-将 开发时 远程主分支拉到本地主分支

git pull origin master

-创建本地 yangpeng 分支

git checkout -b yangpeng

-在本地 yangpeng 分支进行开发

...developing...

-添加到暂存区

git add .

-生成快照

git commit -m 'instruction'

-本地 yangpeng 分支开发完成

-将 开发完成时最新 远程分支拉到本地 yangpeng 分支

git pull origin master 

-解决冲突

-此时最新master+your project ,推到远程 yangpeng 分支

git push origin yangpeng

-切换到本地master分支,拉取远程 yangpeng 分支

git pull origin yangpeng

-本地 master 为最新代码后,推到远程 master 分支

push origin master

  • git 自动把本地的master分支和远程的master分支对应起来,默认远程仓库的名称是origin
git clone <url>
  • 在本地创建和远程分支对应的分支
git checkout -b yangpeng origin/yangpeng
  • 建立本地分支与远程分支的关联
git branch --set-upstream branch-name origin/branch-name
  • 推送分支

把当前分支上的所有本地快照推送到远程库。推送时要指定本地分支,Git会把该分支推送到远程库对应的远程分支上。

git push origin master
git push origin dev

Git命令积累

检查git安装成功

git --version

初始化本地git仓库

cd <directory>
git init

配置用户名

git config --global user.name "xxx" 

配置邮件

git config --global user.email "xxx@xxx.com"

克隆远程仓库主分支

git clone <URL>

查看当前版本状态(是否修改)

git status

添加文件至暂存区

git add <file>

添加当前子目录下所有更改过的文件至暂存区

git add .

提交,形成快照

git commit -m 'instruction'

将add和commit合为一步

git commit -am 'instruction'

显示提交日志

git log

显示所有未添加到暂存区的变更

git diff

显示所有添加到暂存区未形成快照的变更

git diff  --cached

比较与上一个版本的差异

git diff HEAD^

关联远程仓库

git remote add origin <URL>

显示本地分支

git branch

显示所有分支

git branch -a

显示所有远程分支

git branch -r

显示所有已合并到当前分支的分支

git branch --merged

创建分支

git branch <分支名称>

切换分支

git checkout <分支名称>

创建并切换分支

git checkout -b <分支名称>

合并分支(在主分支下,执行合并将其它分支合并到主分支)

(master) -> git merge <分支名称>

删除分支

git branch -d <分支名称>

从远程分支创建本地新分支(可重命名)并检出

git checkout -b dev origin/dev

合并远程master至当前分支

git merge origin/master

将当前分支push到远程master分支

git push origin master

获取所有远程分支

git fetch

获取远程分支master并merge到当前分支

git pull origin master

参考:git常用命令


Git fetch & Git pull 区别

git fetch 从远程获取最新分支代码,不会自动merge

git fetch origin master:tmp //从远程仓库master分支获取最新,在本地建立tmp分支

git diff tmp //將當前分支和tmp進行對比

git merge tmp //合并tmp分支到当前分支

git pull 从远程获取最新代码,并且自动merge


什么是git?
– git 是分布式版本管理系统

git的优点
– Git跟踪并管理的是修改,而非文件。
– 版本回滚
– 远程仓库

版本控制系统的用途
– 1备份(记录多个版本文件的功能), 2记录操作时间线(查看历史操作,进行版本回滚、前进的功能),3多端共享代码(代替各种云盘的功能),4‘自动’合并(解决多人开发冲突问题)

分布式与集中式的区别?
– CVS 和 SVN 是集中式版本管理系统,速度慢,需要联网使用。

集中式版本管理系统的版本库是集中存放在中央服务器的,每个人使用时需要先从中央服务器取得最新版本,工作完成再上传至服务器。
这里写图片描述
分布式版本管理系统中不存在中央服务器,每个人的电脑都是一个版本库。与集中式版本管理系统相比,安全性更好。有一个“中央服务器”是用于大家进行交换修改。
这里写图片描述

什么是版本库?
– 版本库又叫仓库(repository),可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
这里写图片描述

版本库里有什么?

这里写图片描述
– Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD
git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支


命令

*创建git仓库$ git init

*将文件添加到仓库共两步

– 将指定文件交由git管理,推到缓存区$ git add <file>
– 推入目录下全部文件$ git add .
– 将文件推到仓库,形成快照commit,-m为说明信息$ git commit -m<info>
– 就像游戏存档

查看仓库版本状态$ git status 文件是否修改,是否提交

查看详细修改内容
– 比较工作区和缓存区的差别$ git diff<file>
– 比较缓存区和仓库区$ git diff --cached
– 比较工作区和仓库区$ git diff HEAD

查看版本的历史信息$ git log

版本回滚
– 版本回滚实际上是切换HEAD指针的指向。
– 指针指向上一个版本:$ git reset --hard HEAD^
HEAD是当前版本,HEAD^是上一个版本,HEAD~100上100个版本

版本前滚
– 1查看历史命令:$ git reflog
– 2查看对应版本ID
– 3改变指针:$ git reset --hard commit_id

撤销修改
– 场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file缓存区覆盖工作区

– 场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file> 仓库区覆盖缓存区,就回到了场景1,第二步按场景1操作。或者用命令git checkout HEAD <file> 仓库区覆盖缓存区和工作区

– 场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

关联远程仓库$ git remote add origin git@github.com:username/filename

将本地分支推送到远程仓库
推送分支全部内容$ git push -u origin master
推送分支最新修改$ git push origin master

从远程仓库克隆到本地
首先必须知道仓库的地址,然后使用git clone <address>命令克隆。


分支

git里存在一个主分支mastermaster指向提交HEAD实际上指向当前分支
这里写图片描述
每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线也越来越长。
这里写图片描述

当我们创建新的分支,例如dev时,Git新建了一个指针叫dev,指向master相同的提交,再把HEAD指向dev,就表示当前分支在dev上:
这里写图片描述

Git创建一个分支很快,因为除了增加一个dev指针,改改HEAD的指向,工作区的文件都没有任何变化!

不过,从现在开始,对工作区的修改和提交就是针对dev分支了,比如新提交一次后,dev指针往前移动一步,而master指针不变:

这里写图片描述

我们在dev上的工作完成了,就可以把dev合并到master上。Git怎么合并呢?最简单的方法,就是直接把master指向dev的当前提交,就完成了合并:
这里写图片描述

查看分支:git branch

创建分支:git branch <name>

切换分支:git checkout <name>

创建+切换分支:git checkout -b <name>

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

分支合并出现冲突

这里写图片描述

由于两个分支内容有冲突,无法进行快速合并,所以需要手动合并。
Git用<<<<<<<=======>>>>>>>标记出不同分支的内容。
这里写图片描述

分支策略

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值