Git学习笔记

1、工具
git--gitbash--cygwin(安装git服务)
gitbash和cygwin的宿主目录不同,需要注意

2、版本控制系统
集中式:CVS、SVN
版本库集中存放在中央服务器,每次都要先获取最新版本再工作,工作完毕,再把代码提交到中央服务器
问题:必须联网、安全性低(中央服务器一旦有问题,无法工作)

分布式:Git
没有中央服务器,每个人的电脑都是一个完整的版本库
特点:无需联网、分支管理

3、自报家门:git config --global user.name "Your Name"
git config --global user.email "email@example.com"

git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,
当然也可以对某个仓库指定不同的用户名和Email地址。

4、创建版本库
(1)创建一个空目录(工作区):mkdir 目录名
(2)通过git init命令将目录变成Git可以管理的仓库:
目录下会多一个.git目录(版本库)(跟踪管理版本库,不要修改,隐藏目录)
ls -ah:查看当前目录下文件

版本库:.git目录
暂存区:stage/index
自动创建第一个分支master及指向master的指针head

5、注意:
所有的版本控制系统,只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,Git也不例外。
版本控制系统可以告诉你每次的改动位置。而图片、视频这些二进制文件,没法跟踪文件的变化,
只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道。

6、添加文件到Git仓库
(1)添加文件:git add files,多个文件用空格分割
实际上是把文件添加到暂存区
(2)提交文件:git commit -m 备注
实际上是把暂存区的内容提交到当前分支,暂存区清空

7、git status:查看仓库当前状态
git diff file:比较工作区和暂存区的差异
git diff --cached file:比较暂存区和版本库的差异
git diff HEAD -- file:查看工作区和版本库里面最新版本的区别

git log:查看提交历史
git log -1:查看最后一次提交(-2 则是最后两次)
git log --pretty=oneline:格式化输出信息,单行显示
--graph:显示分支合并图
--abbrev-commit:简写commit_id
git reflog:查看操作命令历史
git reset --hard HEAD^:回退到上一版本
# HEAD 表当前版本,HEAD^ 表示上一版本,HEAD^^ 表示上两版本,HEAD~99 表示上99版本。
git reset --hard commit_id:回到commit_id标识的版本
commit_id:版本号,由SHA1计算出的,十六进制标识

修改了工作区文件内容,未添加到暂存区,想丢弃修改:git checkout -- file
修改了工作区文件内容,已经添加到暂存区,想丢弃修改:
(1)git reset head file:丢弃file的暂存区内容
(2)git checkout -- file
修改了工作区文件内容,添加到暂存区且提交到版本库,但未推送到远程库,想撤销提交:
可以进行版本回退:git reset --hard commit_id

8、Git跟踪并管理的是修改,而不是文件

9、删除文件
rm file:删除工作区文件
(1)误删
git checkout -- file
(2)真删
git rm file
git commit -m 备注

10、GitHub
提供Git仓库的托管服务,本地Git仓库和GitHub仓库间的传输是通过SSH加密的

ssh-keygen -t rsa -C 邮箱
在用户主目录下,生成.ssh目录,目录下生成密钥对:id_rsa(私钥)和id_rsa.pub(公钥)

将公钥内容设置到GitHub

11、关联远程仓库origin:(origin是默认名称,可以自定义)
git remote add origin git@github.com:ltaiyh/learngit.git

第一次推送分支内容:
git push -u origin master
以后提交后推送:
git push origin master

删除远程库:
git remote rm origin

12、从远程库克隆
git clone git@github.com:ltaiyh/learngit.git
克隆后,默认只能看到master分支

13、Git支持多种协议
(1)ssh:速度快
(2)https:速度慢、每次推送都要输入口令

14、分支
分支master指向提交,head指向当前分支,提交只对当前分支有效
(1)创建并切换分支
git checkout -b dev
相当于:
git branch dev:创建分支
git checkout dev:切换分支
(2)查看当前分支
git branch:列出所有分支,当前分支前有*标记
(3)合并分支
git merge dev
(4)删除分支
git branch -d dev
git branch -D dev:强制删除

15、合并冲突
Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容
当Git无法自动合并分支时,需要先解决冲突,再提交

查看分支合并图:
git log --graph --pretty=oneline --abbrev-commit

16、合并分支时,加上--no-ff参数就可以用普通模式合并,强制禁用Fast forward模式,
Git就会在merge时生成一个新的commit,合并后的历史有分支,能看出来曾经做过合并,
而fast forward合并就看不出来曾经做过合并

17、分支管理的基本原则:
(1)master分支是非常稳定,仅用于发布新版本,不能在上面操作
(2)dev分支是不稳定的,在该分支上面操作,发布版本时,将dev分支合并到master分支在发布
(3)开发人员都有自己的分支,都往dev分支上面合并

18、修改bug分支
新建一个bug临时分支,修改bug后,合并分支,删除临时分支

git stash:保存当前工作现场
git stash list:查看工作现场列表
git stash apply:恢复工作现场时stash内容并不删除 需要用git stash drop删除
git stash pop:恢复工作现场的同时把stash内容也删除

19、添加新功能feature分支
类似bug分支

20、查看远程库信息:git remote -v

git push origin dev(本地):推送分支
把该分支上的所有本地提交推送到远程库,推送时要指定本地分支
需要推送的分支:master(主分支)、dev(开发分支)

git checkout -b dev origin/dev:
创建远程origin的dev分支到本地

git branch --set-upstream-to=origin/dev dev:
设置本地dev分支和远程origin/dev分支的链接

git pull:抓取分支最新提交

21、标签tag(发布版本时打标记)
标签是版本库的一个快照,其实就是指向某个commit的指针(标签不能移动,分支可以移动)
tag是个有意义的名字,容易记忆,跟某个commit绑定在一起

标签不是按照时间顺序列出,而是按照字母排序
创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。

git tag name:对当前提交打标签
git tag name commit_id:根据commit_id打标签
git tag -a name -m 备注 commit_id:添加标签说明
git tag -s name -m 备注 commit_id:用私钥签名一个标签
签名采用PGP签名,用PGP签名的标签不可伪造
git tag:查看所有标签
git show tagName:查看标签信息

git tag -d tagName:删除本地标签
git push origin tagName:推送标签到远程库
git push origin --tags:一次性推送所有未推送的标签
删除远程标签:
git tag -d tagName
git push origin :refs/tags/tagName

22、使用GitHub
(1)点击Fork克隆一个仓库到自己的账号
(2)从自己的账号下clone仓库到本地
(3)推送修改到自己的仓库
(4)发起pull request,提交修改到官方仓库

23、Git的配置项
git config --global color.ui true:显示颜色

24、Git忽略特殊文件:
.gitignore文件,需要提交到版本库
原则:
(1)忽略操作系统自动生成的文件,比如缩略图等
(2)忽略编译生成的中间文件、可执行文件等,比如.class文件
(3)忽略自己带有敏感信息的配置文件,比如口令的配置文件

git check-ignore -v file:检查文件不能提交原因

git add -f file:强制提交

25、配置别名
git config --global alias.st status
加上--global是针对当前用户(所有仓库)起作用的,
如果不加,那只针对当前的仓库起作用

每个仓库的Git配置文件都放在.git/config文件中
别名就在[alias]后面,要删除别名,直接把对应的行删掉即可

26、搭建Git服务器
教程地址
环境:Linux
要方便管理公钥,用Gitosis
要控制权限,用Gitolite

以上是学习廖雪峰老师的Git教程后的笔记

Git官网:https://git-scm.com


让我们一起遨游在代码的海洋里!




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值