git学习

来源:互联网 发布:淘宝网运费模版 编辑:程序博客网 时间:2024/06/06 02:38

本篇博客将从以下几个方面总结Git:

  • Git是什么
  • Git安装
  • Git常见命令

1 Git是什么

Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git主要有如下功能特性(摘自百度百科):
这里写图片描述

一般开发者的角度来看:
  • 从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
  • 在自己的机器上根据不同的开发目的,创建分支,修改代码。
  • 在单机上自己创建的分支上提交代码。
  • 在单机上合并分支。
  • 把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
  • 生成补丁(patch),把补丁发送给主开发者。
  • 看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。
  • 一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。
主开发者的角度来看:
  • 查看邮件或者通过其它方式查看一般开发者的提交状态。
  • 打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。
  • 向公共服务器提交结果,然后通知所有开发人员。

2 Git安装

从官网https://git-scm.com/downloads上下载对应系统的的git客户端版本,安装后从启动栏中进入git bash中

初始化Git客户端配置

git config --global user.name "wygu"
git config --global user.email "wygu@sysnew.com"

3 Git常见命令操作

(1) Git配置SSH公钥

大多数Git服务器都使用SSH公钥进行认证,git添加SSH-Agent配置步骤如下:

  • 查看目录cd ~/.ssh下是否存在id_rsa和id_rsa.pub两个文件,如果存在删除
  • 生成密钥: ssh-keygen -t rsa -C “个人邮箱”,连续三个回车
  • 获取其中的公钥: cat ~/.ssh/id_rsa.pub
  • 将公钥添加到git账户下的profile setting下的SSH keys
  • 添加后在在终端输入:ssh -T git@172.17.249.122,如果结果为:Welcome to GitLab, 顾为玉,表示添加成功。

(2) Git基本命令

1) 迁出代码

  • 迁出主干代码:git clone git@172.17.249.122:upchat-public-team/upchat-public.git,

  • 迁出指定分支的代码:git clone -b 分支名仓库地址,比如git clone -b sys_admin git@172.17.249.122:upchat-public-team/upchat-public.git

2) 分支操作(假设分支为sys_admin)

  • 创建分支:git branch sys_admin
  • 显示当前分支:git branch -a
  • 切换到分支:git checkout sys_admin
  • 删除本地分支:git branch -d sys_admin
  • 删除远端分支:git push origin –delete sys_admin

3) 提交代码

  • 如果本地分支sys_admin1和远程分支sys_admin2之间还没有建立任何联系,需要先执行:git branch –set-upstream-to=origin/sys_admin2 sys_admin1
  • 查看本地分支更新情况:git status
  • 提交代码到本地: git add .; git commit -m “first commit”或者直接git commit -am “first commit”,注意如果存在新增的类只能采用第一种方式
  • 本地仓库代码push到远程分支中:git push origin remote_branch:local_branch,如果远程分支不存在,直接创建一个远程分支
  • 如果出现”![rejected]”,此时表示有人提交先你提交了代码,需要先更新代码,再PUSH:

    – 更新代码:git pull –rebase

    – 如果出现冲突,逐个手动修改冲突文件为最终状态并add:git add <冲突文件路径>

    – 继续提交:git rebase –continue

注意补充冲突解决方式:如果出现下述问题:
error: Your local changes to the following files would be overwritten by merge: xxx/xxx/xxx.java Please, commit your changes or stash them before you can merge. Aborting

stash方式

  • git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
  • git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
  • git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
  • git stash clear: 清空Git栈。此时使用gitg等图形化工具会发现,原来stash的哪些节点都消失了。

放弃本地修改,直接覆盖掉修改的代码

  • git reset –hard
  • git pull

在本地的git提交了又想撤销,像没发生过一样

  • git reset HEAD^ —撤销最近一次

  • git reset HEAD~3 —撤销最近三次

如果已经push到远端,又发现自己不应该push,想反悔

  • git revert HEAD —撤销前一次 commit
  • git revert HEAD^ —撤销前前一次 commit
  • git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)

4)合并分支

  • 合并远程master分支至当前分支:git merge origin/master
  • 合并提交ff44785404a8e的修改:git cherry-pick ff44785404a8e

(3) Git 标签相关操作

标签可以针对某一时间点的版本做标记,同CVS一样,git也可以打标签,作用于版本的发布

1)显示标签

  • 列出标签:git tag
  • 搜索符合模式的标签:git tag -l ‘v0.1.*’
  • 查看标签的版本信息:git show v0.1.2

2)打标签

git标签分为两种类型:轻量标签和附注标签。轻量标签是指向提交对象的引用,附注标签则是仓库中的一个独立对象。

  • 创建轻量标签: git tag v0.1.2-light

  • 创建附注标签: git tag -a v0.1.2 -m “0.1.2版本”

创建轻量标签不需要传递参数,直接指定标签名称即可。创建附注标签时,参数a即annotated的缩写,指定标签类型,后附标签名。参数m指定标签说明,说明信息会保存在标签对象中。

3)标签相关操作

  • 切换到标签:git checkout [tagname]
  • 删除标签:git tag -d v0.1.2
  • 针对某次提交补打标签:git tag -a v0.1.1 9fbc3d0
  • 标签发布,通常的git push不会将标签对象提交到git服务器,我们需要进行显式的操作:

    — 将v0.1.2标签提交到git服务器:git push origin v0.1.2

    — 将本地所有标签一次性提交到git服务器:git push origin –tags

4)删除远端tag

使用如下方式删除远程tag:

git push origin --delete tag <tagname>

或者使用推送一个空tag到远程tag

git tag -d <tagname>
git push origin :refs/tags/<tagname>