ubuntu16.04
系统中登录的账户是mi
1.拉取代码:(git clone下来是masterh主分支的代码)
git clone ********** 文件属于用户mi
sudo git clone ********** 文件属于用户为root(sudo就是使用了root权限)
注意:如果使用了sudo 即文件归root账户的操作权限,但是系统中的帐号是mi ,所以用打开那些克隆下来的文件只有只读权限不能操作(编辑器和命令窗口都不能修改),所以不使用sudo拉取代码。ll看一下就知道文件归属信息
2.查看所有的分支
git branch -a
3.查看当前的分支
git branch
创建分支
git branch double 创建double分支
切换分支
git checkout double 切换到double分支
创建并切换分支
git checkout -b double 上面两个命令的结合
删除分支
git branch -d double //需要删除的分支不是当前打开的分支
git branch -D double //强行删除该分支
恢复删除的分支
git branch <branch_name> <hash_val>
<hash_val>是git版本管理的散列值
git relflog //查看git版本散列值的方法
git branch double HEAD@{13} //恢复删除分支
用于测试:
git checkout master 切换到master分支
git diff double 比较master分支和double分支的不同(当前在master分支上)
git merge double 将double分支与master分支合并(合并某分支到当前分支)
git branch -d double 合并到了分支,没用的分支可以删除
git log -p master origin/master 比较本地仓库和远程仓库的区别
合并分支
git merge double
合并分支发生冲突
git merge --abort //发现有冲突想取消合并
git commit //发现有冲突,在本地修改后,使用git commit提交即可
4.切换到一个开发分支(本地没有,因为本地还很干净,只有master分支)
方法一:
git checkout -b work_base origin/work_bse 作用checkout远程的work_base分支,在本地起名work_base,并切换到本地的work_base分支
git checkout -b dev-double-fentan origin/master //-b后为本地创建的分支,后面为远程分支
方法二:
git fetch origin work-base:work-base //从远程的origin仓库的work-base分支下载到本地并创建work-base分支,但不会切换到本地的work-base分支(前面为远程分支,冒号后面为本地分支)
git checkout work-base //切换到work-base分支
5.同样的方法,可以建立其他的分支
6.有了很多分支后,切换分支
git checkout work_base
7.本地修改了文件,还没有提交,但是还想用线上的
cd 目录下
git checkout file.php
8.更新代码(从远程获取最新代码到本地)
方法一:git pull 从远程获取最新版本并merge到本地
git pull origin work-base (如果本地当前的分支正处于work-base,直接使用git pull)
注意:如果git pull之前,本地修改了一些文件,但这些文件也可以不修改,那就使用先使用git reset --hard 再使用git pull ,这样本地的修改就没了
方法二:git fetch 从远程获取最新版本到本地,但不会与本地代码自动merge
git fetch origin work-base (如果本地当前的分支正处于work-base,直接使用git fetch)
git log -p work-base origin/work-base //比较本地的work-base分支和origin/work-base分支差别
git merge origin/work-base 合并origin/work-base分支到当前的本地work-base分支
git reset 详解
git reset --soft //回退后work-base分支修改的代码被保留并标记为add的状态
git reset --mixed(默认) //重置索引,但不重置工作树,更改后的文件标记为未提交(add)的状态
git reset --hard //重置索引和工作树,并且work-base分支修改的所有文件和中间的提交、没提交的代码都被丢弃了
git log //看到提交的日志
git reset commit号 --hard
git reset --merge //和--hard类似,只不过如果在执行reset命令之前你有改动一些文件并且未提交,merge会保留你的这部分修改,hard则不会。
注意:如果你的这些修改add或者commit过,merge和hard都将删除你的提交
git reset --keep //和--hard类似,执行reset之前改动文件如果是work-base分支修改了的,会提示你修改了相同的文件,不能合并。如果不是a分支修改的文件,会移除缓存区。git status还是可以看到保持了这些修改。
提交代码
git pull origin work-base //提交之前一定要pull一下
git status //一定要查看下修改的文件状态,看是不是需要提交的
git add . //有.的话就是全部提交了
git commit -m '海外物流' //如果没有写-m 会进入到vim中,按下ctrl+x就退出了
git push origin work-base
本地误删文件
cd //到目录下
git reset HEAD UserBehaviorController.php
git checkout UserBehaviorController.php