git作为一个分布式版本控制软件,已经成为我们工作中使用的最广泛的工具。
git详细介绍点这里
三个概念
- 已提交(mommitted)
该文件已经被安全滴保存在本地数据库种了。例如git clone 其实就是这个状态 - 已修改(modified)修改了某个文件,但还没提交保存
- 已暂存(staged)把已经修改的文件放在下次提交时要保存的清单里
三个区域
- 工作区(也称工作目录),working directory
- 暂存区 ,satge/index
-
历史记录区(也称版本区),history
转个阮一峰老师的图吧
几个常见名词
- remote 远程仓库
- origin 一般默认远程仓库的标签
- master 主支干
- Dev 分支
基础命令
- 第一次使用需要设置用户名和邮箱
git config --global user.name "name"
用户名
git config --global user.email "email address"
邮箱 -
git add
. 把文件的所有改变都放入暂存区 -
git status
查询文件状态 -
git rm
删除文件 -
git mv
重命名文件 - 提交到本地仓库有几个命令
git commit -am "备注信息"
git commit -a "备注信息"
git commit -m "备注信息"
注意备注信息是必须要填写的,而且尽量简明扼要 -
git pull
用来更新本地仓库版本的 -
git push
提交到远程仓库
远程本地操作
- git clone 远程下载,最常用的命令
git clone origin "项目地址"
注意,地址协议有几种、http,https,git等,但是推荐用ssh,也就是git协议,因为最快 - 使用ssh协议,则必须要有公私钥对,没有的话,必须要设置一个,不会的点这里
- 修改文件用vim打开,修改后退出保存,安利自己写的vim使用教程
- 然后
git add.
git commit
git push
本地文件推送到远程仓库
-
mkdir 文件夹名
新建文件夹
touch 文件
新建文件 - 最重要的步骤:git init
git是本地仓库和远程仓库之间的传送工具,可是我们刚刚只是建了文件夹,
文件夹又不是仓库,自然无法git传送,所以我们要把文件夹变成仓库
这里重要的概念就是,仓库里有个隐藏的.git的文件,只要文件夹里有.git 就行了
git init
初始化文件夹为本地仓库 - 这时我们git add. git commit git push 时 它会报错说找不到远程库
我们clone的时候,远程仓库会自动建立两者的链接关系,但我们只在本地创建仓库
和远程库就没有关系了,这时我们就得让它俩有关系
git remote add origin 远程库地址
添加远程库标签
git remote -v
查询本地仓库的远程仓库地址
git remote set-仓库地址 仓库名
修改远程仓库地址 - 这时我们就可以提交了
分支操作
分支操作可以说是git 使用中最重要的操作了(不懂什么是分支,请自行谷歌/百度),首先要知道,仓库有且只能有一个maser分支,可以说是主干,所有提供给用户使用的正式版本,都在这个主分支上发布。
git branch
查看本地分支列表
git branch -r
查看远程分支列表
git branch -a
查看所有本地远程分支git branch dev
创建本地库dev分支
git checkout dev
切换到dev分支
这两个可以简写成下面这个命令
git checkout -b dev
合并分支
首先用git checkout 分支名
切换到需要合并的分支上去,一般都是master分支
然后使用git marge 需要被合并的分支名
合并分支到主分支上删除分支
git branch -d 分支名
删除远程分支
git push origin --delete [branch-name]
git branch -dr remote/branch
撤销操作/版本回滚
- 这次简单介绍下,我理解也不是很透彻,之后会专门写一篇关于此的文章
- 一般是两种用法
git reset
和git revert
-
git reset --"参数"
一般参数有hard
、mixed
、soft
git reset --hard
版本回退,同时工作区和暂存区的文件也回到此版本时的状态
git reset --mixed
默认参数,改变引用文件,不改变工作区文件,但是会改变暂存区文件
git reset --soft
只修改文件,不会改变暂存区和工作区文件
可以这样理解,当你需要彻底回到某个提交版本时,就用hard;若是想保留自己修改过的文件,就用mixed,保留下文件源码,这也是默认方式;若是仅仅只是想撤销某次提交,就用soft,保留下所有修改文件 -
git revert
撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交
git revert HEAD
撤销前一次 commit
git revert HEAD^
撤销前前一次 commit
git revert 的撤销并不是意义上删除,而是重新提交一次commit命令,
只是这个命令内容刚好和要撤销的那个命令完全相反,造成了回到错误提交状态之前,但是你查记录会发现,里面会有之前错误的commit ,也有这次的commit - 两者区别,最大的区别在于,git revert 时,版本是前进的,而git reset时,版本其实是回到撤销的命令的版本
我的理解是,revert,就相当于政府连续发布了两条完全相反的命令,造成了状态上的恢复,但是大家知道确实有过这个命令,而reset则是干脆删除了这个命令,直接强制恢复,抽取了的记忆,这个是断层的,不存在了,认为什么都没发生 - 更深层的就只能大家在使用中去体会了,我以后会写一篇详细的文章。
写在最后
- 当有冲突时,要先修改文件,再提交
- 更多git使用教程请点这里