git使用
事前准备
安装git
创建项目
创建项目
windows
鼠标右键:git bash here
mkdir learning_git
Linux
在命令窗口 mkdir learning_git
git init
克隆项目
首先要知道项目的网址
git clone 网址
常用分支情况
查看分支情况
git branch :查看本地分支
git branch -r:查看远程分支
git branch -a:查看远程以及本地分支
创建分支
git branch qdw:在当前分支基础上创建qdw 分支
切换分支
git checkout qdw:切换到该分支
删除分支
git branch -d qdw
合并分支
在master上进行合并
git merge qdw
master将qdw分支的信息合并了,也就是记录了qdw分支的修改
合并分支遇到冲突
如果出现了冲突,修改会有master|MERGING这样提示
自己解决冲突,表示自己修改的冲突时修改的master分支的,qdw分支的还是没有修改的样子
自己返回qdw 分支,然后git merge master分支就会和本地的master 分支同步了
提交修改
文件提交到仓库
git add readme.txt
git add -A:全部提交到暂存区
git commit -m ‘添加readme.txt’ 将暂存区全部提交到仓库
git add 撤销
git reset HEAD 将git add的内容全部取消
git reset HEAD read.txt 只讲read.txt取消add
合并分支遇到冲突
如果出现了冲突,修改会有master|MERGING这样提示
自己解决冲突,自己解决冲突的结果是在 master中的。
自己解决冲突,并没有对qdw分支进行更新,也就是说,自己解决冲突的结果,没有在qdw分支上体现出来
表示自己修改的冲突时修改的master分支的,qdw分支的还是没有修改的样子
解决完冲突,自己返回qdw 分支,然后git merge master分支就会和本地的master 分支同步了
查看冲突
在master 上将一个文件某个位置进行了修改,
在qdw分支上将同一个文件相同位置进行了修改,那么就会产生冲突
cat readme.txt
如果一个文件有好多函数,每个人修改各自的函数,这样不会出现冲突
同时修改一个函数才会出现冲突
版本回退
回退1个版本
git reset --hard HEAD^
回退2个版本
git reset --hard HEAD^^
回退10个版本
git reset --hard HEAD~10
会退到指定版本
git reset --hard 6fcfc89
远程分支和本地分支的对应关系:个人理解
远程分支:
master
----dev
---------qdw
本地分支
git clone 后,本地会有master 分支,这个分支是和远程的对应的
git branch
不会发现 dev、qdw两个分支
git branch -a
会发现master
以及remotes/origin/master;
remotes/origin/dev;
remotes/origin/qdw
这说明本地还没有dev,以及qdw这两个分支
git checkout dev 或者qdw后
git显示switch 成功 ,并显示your branch is up data to remotes/ origin/dev
这说明本地的dev或者qdw创建了。
这样本地的master,dev, qdw 和远程的master,dev,qdw是对应的。
远程推送:
git push origin qdw:refs/for/qdw
如果自己:
git checkout master
git merge qdw
git push origin master:refs/for/qdw
这样也没问题,但是再次自己checkout到master分支后又和远程的master保持一致了。这样就不是自己跟踪的qdw了
自己不论从哪个分支上git clone 都会看到所有的分支:
如果不想让自己看到更改master 那么下载的时候就不应该从master上克隆。应该从dev上克隆
所以:远程有多少分支,本地对应有多少分支,自己可以再创建更细的分支,这样就可以了自己灵活了。
PUSH和PULL
一般git push之前要先 pull一下,保证自己和远程同步
git pull
git pull 全部拉取
git pull origin dev:从远程的dev拉取到本地的当前分支
git push: git push <远程主机名> <本地分支名>:<远程分支名>
git push origin master
远程分支省略,将本地分支推送到远程和该分支有追踪关系的分支(一般是同名字),如果远程没有就会被创建
git push origin
本地分支和远程分支存在追踪关系,
那么远程分支和本地分支都可以省略
将本地分支推送到远程分支上
git push
如果只有一个远程分支,那么远程主机名也可以省略
git push origin 本地分支名: refs/for/远程分支名
如果代码需要审核, 必须用这种方式,否则 会有故障
远程branch 和本地branch的链接
一般默认远程和本地的branch 同名就是链接的
如果没有链接成功可以使用下面命令
git branch --setup-stream dev origin/dev
日志查看
git 问题
git add . 出现 the file will have its original line endings in your working directory
换行
A)Windows和Dos下:使用回车(CR)和换行(LF)两个字符来结束一行,回车+换行(CR+LF),即“\r\n”;
B)Unix和mac下:只使用换行(LF)一个字符来结束一行,即“\n”;
为什么会出现这个问题:
一般git add .不会出现这个提示,只有遇到下面两种情况才会有问题,其实也不叫问题,只是一个提示
(i)我们的团队成员是Linux/Mac平台并参与了项目的git提交
(ii)我们Windows平台的某些软件会生成换行是LF的代码文本(如李俊德git add的是Webstorm生成的HTML项目中隐藏文件夹.idea中的workspace.xml,这个xml文件换行是LF)
········· 可以怎么设置呢?
core.autocrlf是git中负责处理line ending的变量,可以设置3个值:true,false,input。
(A)设置为true【config --global core.autocrlf true】
当设置成true时,这意味着你在任何时候添加(add)文件到git仓库时,git都会视为它是一个文本文件(text file)。它将把crlf变成LF。windows 默认的是这种。可以自动切换,不用管
(B)设置为false【config --global core.autocrlf false】
当设置成false时,line endings将不做转换操作。文本文件保持原来的样子。
(C)设置为input时,添加文件git仓库时,git把crlf编程lf。当有人Check代码时还是lf方式。
因此在window操作系统下,不要使用这个设置。