下面讲解的都是在本地完成的,不需要联网,这就是git的好处,是在本地生成版本历史信息,git push需要联网,这个命令就是将本地信息推送到远端仓库上
git的工作流程
一个git仓库分为三个区
- 工作区 平时也代码的地方
- 暂存区 把一些写好的代码暂时存储的地方
- 历史区 生成一个个版本记录的地方
其中暂存区和历史区代码看不见,是以数据的形式存放在.git文件中
初始化仓库
创建仓库 git init命令
关联远程仓库两种方法
- clone这种比较常用,方便,推荐用这种方法
git clone 远程仓库链接 文件夹名字(可以不写,默认是仓库的名字)
例如:git clone https://github.com/facebook/react.git就可以了
- 第二种方法就是remote
git remote add origin git地址
例如 git remote add origin(仓库的名字,一般推荐用origin) https://github.com/facebook/react.git
关联之后就可以用 git remote -v 查看关联远程仓库的信息
解除远程仓库的关联
git remote rm 名字
例如 git remote rm origin,其实就把上面关联react仓库的联结解除了
git add命令 把文件提交到暂存区
git add XXX 把某个文件提交到暂存区
git add .(把所有修改的文件,包括修改的和新增的,不包括删除的)
git add -u (把所有修改的文件,包括修改的和删除,但是不包括新增的)
git add -A (包括修改的,删除的,新增的)
git commit -m "xxx" 将暂存区提到历史区
例如git commit -m "add indexjs"就是将暂存区的文件提交到历史区了
git status命令
查看当前文件状态,看看文件处于什么状态,一般都会有提示,这个是非常人性化的,一般就靠这个命令就能把git玩透了(略屌。。。)
.gitignore文件
当我们向远端仓库推送的时候,不想提交一些文件的时候,可以在 .gitignore文件中添加这些不想提交的文件,例如:.idea,node_modules文件夹的名字,或者文件名等
将暂存区文件撤回到工作区
如果我们将错误的代码一不小心提交到暂存区的时候,我们希望撤回,有三种方法
- git rm --cached XXX -r 删除暂存区所有的文件或者
git rm --cached . -r 删除暂存区所有的文件
删除之后,然后再将正确的代码add到暂存区- git checkout XXX 将暂存的某个文件撤回到(覆盖)工作区
git checkout . 将暂存区的所有文件撤回到(覆盖)工作区
这种方法只能限制当前代码还没有提交的情况,当前代码没有提交,回滚的是上一下提交暂存区的内容(和工作区内容不一样),如果当前这次也提交了,暂存区和工作区一样,回滚回来也是一样的,这个方式解决不了- git reset HEAD xxx 或者 git reset HEAD . 在暂存区中,回滚到上一次暂存区中记录的内容(暂存区先回滚一下),然后git checkout . 把最新暂存区的信息回滚到工作区,替换工作区内容,这样就避免第二种方法的问题了(推荐用这种方法)
代码回滚操作
git reset --hard 版本号(版本号一般取前七位或者八位就行),当我们回滚到某一个历史版本之后,暂存区和工作区的内容都将被这个版本内容所代替
查看版本历史记录
git log
git reflog
都是查看历史提交记录,在没有历史版本会滚的时候,用哪个都可以,有历史版本回滚,git log只能查看当前回滚历史版本以前的版本
比较三个区的差别
git diff 工作区VS暂存区
git diff master 工作区VS历史区
git diff -cached 暂存区VS历史区
查看操作日志
history > XXX.txt 会在本地生成一个XXX,txt的文件,里面全是操作记录
向远程仓库推送(重点了)两种方法
- 主分支操作:git push origin(名字) master(分支) 把本地推送到远程上(推荐用这种方法)
- 首先创建一个分支git branch XXX(分支名字,随便起,一般是自己的名字) 创建一个新的分支
- 然后git checkout XXX 切换到这个分支上(会把当前master主分支中的信息同步到这个分支上)
- 或者直接git checkout -b XXX 切换并且创建某个分支(前提是有主分支的情况下,把文件提交到历史区会生成master)
- 然后把自己每天修改的文件提交到历史区git commit -m "xxx"
把自己分支的内容合并到主分支master上git merge dev(自己的分支)- 然后把自己的分支删掉git branch -D XXX(分支名字),一定要切换到其他分支上才可以删除当前分支,当然也可以不删掉,只是为了避免在远程仓库中的冲突,
- 最后在master上git push到远程仓库中
拉取远程仓库最新代码
git pull orgin(名字) master(分支) origin是本地和远程仓库关联的那个名字,master是远程仓库的主分支;
每次push前要拉取一次
解决代码冲突
如果在拉取完代码后,发生冲突,找到冲突的代码,跟写冲突的代码的人商量看用谁的代码,然后把不用的代码删掉即可,冲突的标志很明显,就是<<<<<<<<<<<<<<<<<<<<<<<<<< HEAD
code code code >>>>>>>>>>>>>>>>>>就是类似这种的标志,很容易查找
End------------