git学习
首先下载git 打开git Bash
由于是分布式控制系统,每台机器必须自报家门
输入:
$git config --global user.name "guojiale"
$git config --global user.email "gil102@sina.cn"
--global这个参数表示这台机器上所有的git仓库都会使用这个配置,当然也可以对特定仓库使用特定的用户名和email
$mkdir learngit
$cd learngit
$pwd //pwd用于显示当前目录
创建git仓库
$git init //把learngit这个目录变成仓库
该目录下会出现 .git目录,若看不见,则用ls -ah
用notepad++在该目录下创建并编写文件readme.txt
$git add readme.txt //将文件添加到仓库
$git commit -m "批注信息" //将文件提交到仓库
//////////////////////////////////////////////////////////
修改文件后
$git status //查看状态
提示:changes not staged for commit
意思是单纯只是修改了,但没有提交到仓库,成为临时状态
$git diff readme.txt //查看不同
$git add readme.txt //将修改提交修改
$git status //查看仓库状态
提示:changes to be commited
readme.txt进入临时状态,改变等被commited
$git commit -m "add three lines"
//////////////////////////////////////////////////
$git log //显示所有版本
$git log --pretty=oneline //让历史版本显示更简单
$git reset --hard HEAD^ //回到上一个版本
$git reset --hard HEAD~100 //回到前100个版本
当你回到过去后,关闭git窗口,又想回到未来
$git reflog //查看你过去的命令,找到相应版本号,commit在上面的是时间偏后的版本
该命令通常只会有针对版本库的命令(commit,reset)
////////////////////////////////////////////////////////
在一个目录(learngit) $git init后,该目录下会产生 .git 文件目录,该目录即为版本库
工作区:learngit目录就是一个工作区
假设增加了一个Lisense并修改了readme.txt
$git status
会提示:readme.txt modified
Lisense.txt untracked
同时$git add 两个文件,把他们提交到暂存区
一次性commit到master分支
每次修改,必须被add到暂存区,然后commit,
否则修改了->add->再修改->commit(只会把暂存区的给commit了),第二次修改就没实现
补救:$git add->commit
///////////////////////////////////////管理修改
$cat readme.txt 可用股查看工作区的文件内容
$git checkout -- readme.txt //可撤销工作区的修改
如果add到了暂存区,再次对工作区做修改,会变回之前被放在暂存区之后的样子
////////////////////////////////////////////////////////// $git reset HEAD readme.txt
若把修改提交到了暂存区用 $git reset HEAD readme.txt 撤销暂存区的修改,退回到工作区
接着 $git checkout -- readme.txt 撤销工作区的修改,回到上一次commit的状态
/////////////////////////////////////////////////////////////////////////////////////////$rm readme.txt
$rm readme.txt //删除工作区的文件
$git status //有修改没被提交到暂存区
此时如果确实想删:
$git rm readme.txt
将版本库里面的该文件也给删了
如果是误删:
$git checkout -- readme.txt //撤销工作区的文件删除操作,因为版本库里还有,仿佛版本库里面就是参照
/////////////////////////////////////////////////////////////////////////////////////////////////////////添加远程库
$cd learngit ///进入本地git仓库
$git remote add origin https://github.com/gabygoole/learn.git //让本地仓库关联github上的learngit仓库
$git push -u origin master //由于是第一次推送,github上仓库为空,加-u
总结:要关联一个远程仓库用
$git remote add origin http...
关联后使用:
$git push -u origin master
本地commit后:
$git push origin master
我们第一次推送master
分支时,加上了-u
参数,Git不但会把本地的master
分支内容推送的远程新的master
分支,还会把本地的master
分支和远程的master
分支关联起来,在以后的推送或者拉取时就可以简化命令
$cd是返回上级目录
$ls //列出该目录下所有文件
//////////////////////////////////
要克隆一个远程仓库,先知道其地址 有ssh格式(原生协议,最快)的,有http格式的,http要慢很多
$git clone http...
////////////////////////////////////////////////////创建/删除分支
$git checkout -b dev //创建dev分支
接着修改文件
$git add README.md
$git commit -m "branch test"
$git branch master
$git merge dev //将指定的dev分支合并到当前分支
$git branch -d dev //删除dev分支
总结:$git branch //查看branch
1.
$git branch dev //新建分支
$git checkout dev //转换分支
2.
1等同于2
$git checkout -b dev //新建dev分支,并且转换到dev分支
/////////////////////////////////////////////////////解决冲突
$git log //当出现<end>标记,输入q可退出历史记录
当遇到master分支和fea1分支上下并行时,这时$git merge fea1就要冲突
解决办法是在master分支重新修改这个冲突的文件,再commit,两个文件会分支会合并在一起,最后删除fea1分支
/////////////////////////////////////////////////////
当我误操作
$git commit README.md
做操作提示:
If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.
解决:
rm -f ./.git/index.lock
续:分支管理策略
git pull:从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:'git pull origin master'就是将origin这个版本库的代码更新到本地的master主枝