少年恃险若平地,独倚长剑凌清秋。这篇文章主要讲述#yyds干活盘点# git实用基础教程(分布式版本管理)相关的知识,希望能为你提供帮助。
@TOC
一、常用的linux命令git bush
的命令行风格和linux
与unix
风格一致。所以这里会先讲一些简单的linux命令
cd
切换到相应子目录cd..
返回上级目录pwd
显示当前目录ls(ll)
列出当前目录所有文件touch
创建一个新文件,例如:touch index.html
rm
删除一个文件,如:rm index.html
rm -r
删除一个文件夹rm -rf /
递归清除,/
在linux里面表示根目录mkdir
新建一个文件夹,如:mkdir new folder
mv
移动文件,如:mv index.html
reset
初始化终端(清屏)clear
清屏history
在终端输入的命令历史help
帮助exit
退出cat
查看文件内容sudo passwd root
设置切换root用户密码su
切换root用户
- windows上安装git
去官网下载即可https://git-scm.com/download/win,安装过程很简单,基本全都默认即可
随便找一个文件夹,右键git bush能显示类似cmd命令行的界面就行
- Linux上安装git
Ubantu上打开Terminal输入命令:sudo apt install git
,可能会让你输入密码,然后按照指令向下进行
文章图片
2、git简单配置
所有的配置文件实际上都存在本地,global
表示全局配置,每次git
提交都会使用该信息。如果想在某个项目中使用特定的配置,可以在项目配置信息时不加global
命令
/etc/gitconfig
;win下位于git安装目录/etc/gitconfig
用户配置:影响到单个用户。linux下位于 ~/.gitconfig;win下位于
C:\\Users\\用户名\\.gitconfig
,没有设置用户名就是C:\\Users\\Administrator\\.gitconfig
查看当前配置:
git config --list
但是基本默认配置都不用修改,只需要设置用户名和emil地址即可
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门,也就是必须声明你是谁,所以< font color=red> 必须配置< /font> 好名字和Email地址。
$ git config --global user.name "Name"
$ git config --global user.email "email@example.com"
可以通过
git config --list
查询到上面配置的情况文章图片
三、git工作区、暂存区、版本库和远程仓库
文章图片
工作区(Working Directory): 就是你本地存放代码的地方(一整个文件夹)
暂存区(Stage): 保存你工作区进行的改动,一般存放在 .git 目录下的 index 文件(.git/index)中,所以暂存区也叫作索引(index)。
本地仓库(Repository):将暂存区改动后的代码提交到本地仓库;本地仓库有提交的所有版本数据。其中HEAD文件指向是最新放入仓库的版本(不理解可以等看完修改文件状态部分后再感受一下)
远程仓库(Reomte Directory):托管代码的服务器
文章图片
localFolder
:git管理的一个本地文件夹,也就是一个本地仓库,包括工作空间和git管理的相关内容.git
:存放git管理信息的目录,初始化仓库的时候自动创建,是git的版本库,取消隐藏才会显示workspace
:需要通过git进行版本控制的文件,也就是你的代码stage
:暂存区,在进入到本地仓库前所有的更新都放在暂存区repository
:本地仓库,存放在本地的版本库,有每一次提交的记录;HEAD指向当前的开发分支stash
:隐藏状态,是一个工作状态保存栈,用于恢复和保存workspace中的临时状态- 暂存区和本地仓库不用管理,只需要通过命令去操作即可,他们只是存放工作区改动信息的,只是一个文件
mkdir gitCode
创建本地仓库(创建一个本地文件夹),在准备用git管理的项目的根目录执行:
另一种方式是克隆远程目录,由于是将远程服务器上的仓库完全镜像一份至本地!
#clone一个项目和他整个代码的版本信息
git clone [url]#git clone https://github.com/ahua-GitHub/progect.git
文章图片
五、项目管理版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态。
1、修改文件状态
文章图片
- 查看指定文件状态
git status [filename]
# git status查看全部文件状态
- 添加文件到暂存区
git add [filename]
# git add .添加所有文件到暂存区
# 可以将需要提交的文件修改都存放在暂存区,然后用commit一次性提交所有修改
- 提交暂存区中的内容
git commit -m "消息内容"
# 创建git的时候,git会自动创建了一个master分支,所以上面的命令就是往本地仓库的master分支上提交更改
- 查看文件修改记录
git diff
文件提交到暂存区后,修改文件可以通过该命令查看修改的详情
文章图片
提交修改后的文件和提交新文件一样先
git add README.md
然后git commit -m xxxx
- 查看文件历史修改记录
git log
git log
命令显示本地仓库从最近到最远的提交日志,我们可以看到3次提交,最近的一次是alter README.me 3
,上一次是alter README.me two
,最远的一次是alter README.me
文章图片
- 回退
alter READMD.me two
git reset --hard HEAD^
文章图片
可以通过
cat README.me
,查看文件内容是否回退到alter READMD.me two
那一步但是这时通过
git log
就没法查看到alter READMD.me 3
这一次的版本提交记录了文章图片
这时要是想再回到
alter READMD.me 3
那一次的修改的内容怎么办,git提供了git reflog
命令,用来记录每一次命令文章图片
可以通过
alter READMD.me 3
的commit id实现回退操作git reset --hard 1094a
- 撤销修改
git checkout -- READMD.me
git commit
或git add
时的状态。这里有两种情况:(一)READMD.me自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态。
(二)READMD.me已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
- 可以通过
git diff HEAD READMD.md
查看工作区和把版本库的区别 - 删除文件
git rm fileName#先删除文件
git commit -m 删除文件#然后提交到版本库
如果误删,可以通过
git checkout -- fileNamet
恢复到版本库中的文件版本2、连接远程仓库
- 连接远程仓库
git remote add origin [url]
# git remote add origin https://github.com/ahua-GitHub/gitTest.git
# origin是自定义的远程仓库名
- 将代码提交到远程仓库
git push 远程仓库名 分支
# git push origin master
# master 默认提交主分支
- 解除和远程库的绑定关系
git remote -v
查看远程仓库信息:文章图片
假如添加的时候地址写错了,或者是想解绑当前远程库,可以用查询出来的远程仓库信息进行解绑
git remote rm origin
< font color = red> 注意:< /font> 假如创建远程时,勾选了自动创建README.md文档或者远程分支内容比本地新,push到远程时可能会报错
文章图片
将本地代码和远程仓库中的代码合并即可:
git pull --rebase origin master
3、配置本机ssh公钥
配置本机ssh公钥可以实现远程连接时免密码登录,不用每次连接远程仓库时都输入密码
- 在Terminal或者git bush中随便打开一个目录,输入
ssh-keygen -t rsa
生成公钥,-t rsa 用来指定加密算法,一直回车即可
文章图片
- 生成公钥后win下默认存放在
C:\\Users\\用户名\\.ssh
文章图片
- linux中默认存放在
~/.ssh
文章图片
- 将公钥注册到远程仓库中
在github中点击头像,进入setting,然后选择SSH and GPG keys,将本地生成的id_rsa.pub中的内容复制粘贴过来就行
文章图片
4、过滤规则
可以在仓库的根目录下创建.gitignore
文件,记录一些需要排除掉的文件。比如一些编译以后的文件、一些本机的的配置文件或者操作系统本身在目录留下的文件如 .DS_Store。被过滤掉的文件就不会出现在git仓库中(gitlab或github)了,当然本地仓库中还有,只是push的时候不会上传
1)/mtk/过滤整个文件夹
2)*.zip过滤所有.zip文件
3)/mtk/do.c过滤某个具体文件
4)build/忽略build/目录下的所有文件
5)!*.zip所有.zip结尾的文件不会被过滤
六、git分支管理使用分支可以将工作从开发主线上分离开来,不影响主线开发
1、创建、合并以及删除分支
- 创建分支
git branch dev# 创建dev分支 git switchdev# 切换到dev分支 # git checkout dev旧版方法,和撤销修改类似,不建议使用 # git switch -c dev创建并切换分支 # git checkout -b < name> 旧版方法创建并切换分支
- 查看当前分支
git branch
# 当前分支前面会有一个*
- 修改并提交当前分支上的内容
(1)在README.md 中添加如下内容 #this dev branch 1. the one 2. the two (2)提交代码 1. git add README.md 2. git commit -m "alter for dev"
- 切换到master分支查看README.md文件
git switch master
cat README.md
你会发现master主线上的文件内容并没有修改,因为修改提交在dev分支上,而master分支的提交点并未发生变化
- 合并分支(Fast-forward模式)
git merge dev
#合并指定分支到当前分支,因为当前是master分支,所以这条命令就是将dev分支合并到master分支上
#这时候再看README.md文件就和dev上修改过后的一样了
- 删除dev分支
git branch -d dev # git branch -D dev表示强制删除,
- 复制特定的提交到当前分支
git cherry-pick 4c805e2# git cherry-pick [commit-id]
只会复制
66a32a
这个提交所做的修改,而不会把这个提交所在分支全部merge过来2、分支冲突
- 修改dev分支上的内容并提交
(1)在README.md 中添加如下内容 #this dev branch 1. the one 2. the two (2)提交代码 1. git add README.md 2. git commit -m "alter for dev"
- 修改master分支上的内容并提交
(1)在README.md 中添加如下内容 #this master branch 1. the 1 2. the 2 (2)提交代码 1. git add README.md 2. git commit -m "alter for dev"
- 合并分支
文章图片
这时可以
cat README.md
,查看README.md文件,Git用<
<
<
<
<
<
<
,=======,>
>
>
>
>
>
>
标记出不同分支的内容文章图片
直接
vim README.md
修改文章图片
然后保存
git add README.md
git commit -m "conflict fixed"
查看,已经合并成功
文章图片
git log --graph
可以看到分支合并图。文章图片
这时候dev分支的内容仍然是未合并之前的状态,master分支的内容才是合并后的状态
3、分支管理
合并分支时Fast forward模式下,删除分支会丢掉分支信息。可以merg时加上
--no-ff
,禁用Fast forward模式git merge --no-ff -m "merge in no-ff" dev
合并后用git log看看分支历史
文章图片
实际应用中master分支应该是非常稳定的,也就是仅用来发布新版本
在dev分支上进行开发,也就是说,dev分支是不稳定的,当版本发布的时候,比如1.0,2.0 发布时,把dev分支合并到master上,在master分支发布
开发者都在dev分支上干活,每个人都有自己的分支,不时往dev分支上合并就可以了
4、stash存储
- 暂存当前分支的工作区:
git stash
文章图片
当你正在dev分支cording时,需要创建一个新的分支去修复一个bug,这时可以使用stash去暂存dev分支工作区的内容。(代码修改后没有提交到暂存区或者本地仓库是不能切换分支的)
- 查看缓存的工作区内容
git stash list
- 恢复工作区
(1)通过git stash apply恢复 恢复后stash内容不删除,需要通过git stash drop删除 (2)通过git stash pop恢复 恢复时把stash的内容也删除了
文章图片
推荐阅读
- logstash安装
- centos7双网卡绑定bond#yyds干货盘点#
- (服务运维)rpmepelyum和最小化安装组件
- #yyds干货盘点#Prometheus 之配置步骤及容量规划
- 17个显示彩色字符的批处理代码
- 常用开源监控系统分析推荐(必备知识)
- Ubuntu使用smbclient
- 简单介绍PostgreSQL解析URL的方法
- 零声dpdk网络协议栈