git关键套路及实用命令

3 篇文章 0 订阅
1 篇文章 0 订阅

前言

  lucifer先后在两间企业进行嵌入式软件方面的开发和维护,他们软件的版本控制都是用svn,每次关键时刻你想查看某份软件的更新日记时,打开log的加载速度实在不敢恭维。后来打听几位就业于其他企业的同学用的版本控制软件时,做android或裸框架的linux项目软件的版本维护均为git,然后我就参考廖雪峰的git教程(网址在本文末)产出此篇学习笔记。

第一章 git安装和创建版本库

1. 安装git

  • 从网络下载和安装sudo apt-get install git

  • 设置将来所有仓库的个人信息

$ git config --global user.name "name"
$ git config --global user.email "email@example.com"

2. 创建版本库

  • 初始化当前目录作为仓库:git init

  • 指定文件纳入仓库的管理

$ git add <file>
$ git commit -m "xxx"
  • 移除git对文件的版本管控:git rm <file>
加入暂存区操作的扩展:
暂存 所有变化: git add -A
暂存 修改(modified)和 被删除(deleted)文件,不包括新文件(new): git add -u
暂存 新文件(new)和 被修改(modified)文件,不包括被删除(deleted)文件: git add .

第二章 时光机穿梭

  • 查看仓库状态git status

  • 查看文件差异的内容:git diff <HEAD -- file>(忽略文件权限差异:git config core.filemode false

  • 查看提交的记录git log <--pretty=oneline>

  • 查看被管控的文件git ls-files

  • 相对当前版本进行回退git reset --hard HEAD^

注:“^”的个数表示向后回退版本的个数

  • 切换到任意版本git reset --hard <commit-id>

  • 查看版本变更历史git reflog

重要概念:工作区,版本库=暂存区+分支
理解Git是如何跟踪修改的,每次修改,如果不add到暂存区,那就不会加入到commit中。

撤销文件的更改:
暂存区中的修改内容回退到工作区: git reset HEAD <file>
② 丢弃 工作区的修改(实为覆盖目标文件): git checkout [branch] -- <file>;丢弃所有: git checkout .(除新增文件外)
生成补丁和打补丁:
目标版本工程文件夹内生成补丁: git diff <老版本commit-id> <新版本commit-id> > xxx.patch;若两个版本间差异存在二进制文件,如添加了bmp图片时, git diff <old-id> <new-id> --binary > xxx.patch
老版本工程文件夹内打补丁: git apply xxx.patch

第三章 远程仓库

将github作为远程库:
① 创建SSH key: ssh-keygen -t rsa -C "youremail@example.com"
② 登录github,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴 id_rsa.pub文件的内容.

1. 添加远程库

  • 将本地库关联远程仓库:
$ git remote add origin git@github.com:<用户名>/<仓库名>.git
					|                             |
				本地库给远程库起名          在github上创建时填的仓库名
  • 删除与远程库的关联:git remote rm origin

  • 第一次往远程库推送

$ git push -u origin master
						|
					本地库主分支默认名
  • 后续推送更新到远程库:git push origin <branch>

2. 从远程库克隆到本地

项目从零开始时:
① 创建远程库;
② 克隆到本地: git clone <addr>

ssh协议克隆github的仓库:

$ git clone git@github.com:<用户名>/<仓库名>.git

Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快。

第四章 分支管理

1. 创建与合并分支:

  • 查看分支:git branch

  • 创建分支:git branch <name>

  • 切换分支:git checkout <name>

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

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

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

注:HEAD指向的是当前分支,master是主分支的默认名

2. 解决分支冲突

  不同分支修改同一位置时,“快速合并”会产生冲突,在冲突位置会有指示。解决冲突后,再提交,合并完成。
显示分支合并图

$ git log --graph --pretty=oneline --abbrev-commit
							|             |
						  简化显示   commit的SHA1只显示7位

3. 分支管理策略

a. 禁用Fast forward合并分支
  • git merge <name>会用fast forward模式,删除分支后,会丢掉分支信息。

  • 强制禁用Fast forward模式,git就会在merge时生成一个新的commit分支历史上可以看出分支信息

  • 禁用fast forward模式的合并

$ git merge --no-ff -m "xxx" <brach name>
b. 分支管理
  • master分支应该是非常稳定的,仅用来发布新版本,平时不能在上面干活;

  • 一般在dev分支干活,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;

  • 每个人都在dev分支上干活,每个人都有自己的分支,特定时候再往dev分支合并自己的更新。

4. bug分支

  ① 修复bug时,创建新的bug分支进行修复,然后合并,最后删除;

  ②保存工作现场(未commit的更改):

$ git stash

  ③查看已经保存的工作现场

$ git stash list

  ④恢复工作现场
   第一种 先恢复,再删掉:

$ git stash apply stash@{n}
$ git stash drop stash@{n}

  第二种 恢复+删除:

$ git stash pop

5. 强行删除分支

  • 开发一个新feature,最好新建一个分支;

  • 丢弃一个没有被合并过的分支,强行删除:

$ git branch -D <name>

6. 多人协作

a. 推送分支
$ git push origin <branch-name>

  master分支:主分支,时刻与远程同步;
  dev分支:开发分支,团队所有成员都需要在上面工作,也需要与远程同步;
  bug分支:只用于在本地修复bug,就没必要推到远程了,除非老板要看看你每周到底修复了几个bug;
  feature分支:是否推到远程,取决于你是否和你的小伙伴合作在上面开发。

b. 抓取分支

  ① 从远程库克隆下来;
  ② 在本地只能看到master分支,需在远程库的其它分支工作时,创建远程origin/dev分支到本地:

$ git checkout -b <branch> origin/<branch>

  ③提交更新给本地库,推送到远程库。

c. 合并远程库的更新到本地
  • 查看远程库信息git remote -v

  • 建立本地分支和远程分支的关联git branch --set-upstream <branch-name> origin/<branch-name>

  • 合并远程库关联的分支下来git pull origin <branch-name>

  • 更新本地的远程分支列表git remote update origin -p

注:如果合并有冲突,则解决冲突,并在本地提交;再推送成功。

第五章 标签管理

1. 创建标签

  • 查看所有标签git tag

  • 给HEAD贴标签:git tag <tagname>

  • 对特定commit id贴标签,并附带信息git tag -a <tagname> -m "xxx..." <commit-id>

  • 用PGP签名贴标签:git tag -s <tagname> -m "xxx..." <commit-id>

  • 通过标签看commit内容git show <tagname>

2. 操作标签

  • 推送本地标签到远程库:git push origin <tagname>

  • 推送所有标签git push origin --tags

  • 删除本地标签:git tag -d <tagname>

  • 删除远程库的标签:①先删除本地标签;② git push origin :refs/tags/<tagname>

第六章 使用gitHub

  • 山寨别人的仓库到自己用户里Fork

  • 给作者发送修改请求:New pull request
    Fork和New pull request

第七章 自定义git

  • 配置git交互的内容具有颜色
$ git config --global color.ui true

1. 忽略特殊文件

  ① 在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。现成的配置文件https://github.com/github/gitignore
  ② 把.gitignore文件也提交到git。

注:强制添加一个已经写入配置文件的文件:git add -f <file-name>

2. 搭建git服务器

参考文献

  廖雪峰的git教程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值