发展历程:
2002年以前,志愿者们通过diff方式发给linus,linus通过手工合并代码
2002 - 2005 之间,linus用BitKeeper管理代码
2005年之后 linus花了两周时间用C写了一个分布式版本控制系统,一个月之内 Linux系统的源码由Git管理
2008年 Github网站上线
区别:
CVS、SVN :集中式版本控制体统
Git:分布式版本控制体统
收费的集中式版本控制体统:ClearCase 特点:安装比windows还大,运行比蜗牛还慢
GIt下载
如果你用Debian或者Ubuntu Linux 安装git:sudo apt-get install git
老一点的 安装:sudo apt-get install git-core,原因:之前有软件叫GIT(SNU Interactive Tools),所以GIT叫git-core。由于Git名气太大,就把GUn Intreactive Tools 改成gnuit,git-core 正式改为git
设置
git config user.name / user.email 查看本地name&email
git config --global user.name "Your Name"
git config --global user.email "Your Email"
原因:Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址
命令
pwd 显示当前目录
git init 将文件夹变成Git可以管理的仓库
ls -ah 没有看到.git文件 -- 这个目录默认是隐藏的
git log 查看日志
git log --pertty=oneline 查看日志 只输出commit版本号和commit注释
git log --pertty=oneline --abbrev-commit 查看日志 只输出commit版本号和commit注释的7位ID
git reset --hard HEAD^ 回退到上一个版本
git reset --hard 版本号 回退到某个版本
git reflog 记录每一次命令 回退某个版本号但是不知道版本id的时候可用 记录了你的每一次命令
git diff HEAD -- 做修改文件 查看工作区和版本库里面最新版本的区别
git checkout -- 文件名 让文件回到最近一次add或commit时的状态
git reset HEAD 文件 撤销add 撤销暂存区的修改
rm 文件名 删除添加的文件
git checkout -- 文件名 恢复已删除的文件,因为版本库里面还有,只是删除了目录中的文件
ssh-keygen -t rsa -C "youremail@example.com" 在github创建SSH Key 你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的
git remote add origin 远端项目地址 将本地git和远端的仓库进行关联
git push -u origin master -u:因为远程仓库是空的,所以加上-u参数,git不但会把本地的master分支内容推送到远程新的master分支,还会把本地master和远程master分支关联起来,在以后的推送或者拉取就可以简化命令
git log --graph 查看分支的合并图
git log --graph --pretty=oneline --abbrev-commit 只输出commit版本号和commit注释的分支情况 更一目了然
git merge --no-ff -m "注释文案" 合并分支 禁用Fast forword合并,会生成一个新的commit
git stash 将当前工作现场存储起来,方便去先修改bug
git stash list 查看
git stash apply 恢复,但是stash内容并不删除
git stash drop 删除stash内容
git stash pop 恢复并把stash内容删除
git stash apply stash@{0} 恢复指定stash
git branch -d 分支名 删除分支
git branch -D 分支名 强制删除分支
git remote -v origin抓取和推送的地址,如果没有推送权限,看不到push的地址
标签(tag)
Git标签虽然是版本库的快照,但其实它就是指向某个commit的指针,创建和删除标签都是瞬间完成的
git tag 查看所有标签
git tag <name> 新建一个标签
git show <tagname> 查看标签信息
git tag <tagname> <commit-id> 某次提交需要打tag
git tag -a <tagname> -m "说明文案" <commit-id> 创建带有说明的标签 -a:指定标签名 -m:指定说明文字
git tag -d <tagname> 删除本地标签
git push origin --tags 推送全部未推送过的本地标签
git push origin <tagname> 推送本地标签
删除远程标签
git tag -d <tagname> 先将本地标签删除
git push origin :refs/tags/<tagname> 删除一个远程标签
修改远程仓库
git remote rm origin 删除远程现有仓库
git remote add origin 路径 添加仓库
git remote -v 查看远程仓库
协议
ssh: git://
https:https://
ps:https速度慢,每次推送都需要输入口令
备注
HEAD 当前版本
HEAD^ 上一个版本 .... 以此类推
Q:
如果本地有对应远程分支
git branch branch_nama
如果本地没有对应远程分支
git fetch origin
git checkout -t origin/remote_branch_name
切换分支 git checkout branch_name
Q1:
Pull is not possible because you have unmerged files.
解决:
1.pull会使用git merge导致冲突,需要将冲突的文件resolve掉 git add -u, git commit之后才能成功pull.
2.如果想放弃本地的文件修改,可以使用git reset --hard FETCH_HEAD,FETCH_HEAD表示上一次成功git pull之后形成的commit点。然后git pull.
注意:
git merge会形成MERGE-HEAD(FETCH-HEAD) 。git push会形成HEAD这样的引用。HEAD代表本地最近成功push后形成的引用。
Q#########################
拉取远程分支并创建本地分支
1.git checkout -b 本地分支名x origin/远程分支名x
使用该方式会在本地新建分支x,并自动切换到该本地分支x。
采用此种方法建立的本地分支会和远程分支建立映射关系。
2.git fetch origin 远程分支名x:本地分支名x
使用该方式会在本地新建分支x,但是不会自动切换到该本地分支x,需要手动checkout。
采用此种方法建立的本地分支不会和远程分支建立映射关系
建立映射关系:
git branch --set-upstream-to=origin/分支名
删除分支:
git branch -D 分支名
新建分支:
git checkout -b 分支名
合并分支:
git merge 分支名
拉取远程项目,新建本地分支并跟踪:
1、git clone 远程项目地址
2、新建本地分支并提交:
git checkout -b dbg_lichen_star
3、把新建的本地分支push到远程服务器,远程分支与本地分支同名(当然可以随意起名):
git push origin dbg_lichen_star:dbg_lichen_star
4、建立当前分支与远程分支的映射关系:
git branch --set-upstream-to origin/dbg_lichen_star
得到结果如下:
Branch dbg_lichen_star set up to track...
5、查看当前本地分支与远程分支的映射关系结果:
git branch -vv
网友评论