//初始化仓库的用户信息,——global选项是用来偷懒的,以后新建仓库就不需要重新制定了
git config --global user.name "StivenYang"
git config --global user.email "StivenYang626@gmail.com"
//初始化当前目录作为repod
git init
//向本地仓库提交更改
git commit -m "xxx"
//查看当前是否有更改需要commit
git status
//查看FILE是否被更改,更改的哪几行
git diff FILE
//git的版本控制,各种吃后悔药,哈哈
git reset --hard CommitId
git reglog
git checkout -- FILE //又是一个后悔药:撤销工作区制定文件做过的修改, -- 可是很重要的,不要忘记写了,不然就成了切换分支了哦:-)
git reset HEAD FILE //强力后悔药:可以把已经提交到暂存区的修改给撤销,舒服吧?
//git的工作区,暂存区,和仓库repod的理解
//添加远程仓库,很兴奋,有木有,有木有?
ssh-keygen -t rsa -C "StivenYang626@gmail.com"
//生成秘钥以后,需要把公钥添加到咱们的github setting或者码云 setting的ssh项里面,目的是让你可以为所欲为的修改远程仓库,哈哈,以后修改可是要小心了(有后悔药可以吃,不怕不怕啦)
//把本地的仓库和远程的仓库进行关联,方便在不同的机器上面进行开发这个项目
git remote add origin git@github.com:StivenYang/git.git
git push -u origin master //-u参数是在第一次,也就是远程repo为空的时候使用的,目的是同步master分支,在以后的push和pull时可以简化命令
//克隆远程的仓库到本地
git clone git@github.com:StivenYang/git.git
///////////////////////////////////
//下面是分支branch的概念和命令
///////////////////////////////////
//创建分支并切换到该分支
git checkout -b dev //可以分解为git branch dev 和 git checkout dev 两个命令
//查看分支
git branch
//切换到主分支
git checkout master
//合并分支
git merge dev
//删除分支
git branch -d dev
//查看分支合并图
git log --graph
////////////////////////////////////
//下面是分支冲突
////////////////////////////////////
情景1:你创建了一个分支,修改了这个分支以后,切换到了主分支;然后你没有合并分支,又在master分支上做了修改;修改完之后开始合并分支;这时候,次分支和主分支就会发生冲突,这时候应该怎么办?
我的答案:首先手动解决冲突,然后再合并分支。比方说有一句话:hello world,主分支加了一个?,次分支加了一个!,并且都提交了,这时候合并分支的时候就会发生上述的错误,发生错误以后,这句话就会变成下面这样:
hello world?
也就是这个文件会把两次修改的都列出来让你选择,你需要删除某些你不用的,然后再次进行提交就行了,很方便,有木有?最后别忘了删除不用的分支哦。
//git的Fast forward模式以及禁用该模式
//如果想要在删除分支以后保存你在分支上的操作历史信息,你可能需要关闭fast forward模式
git merge --no-ff -m "merge with no-ff" dev
//在实际的开发里面,分支的管理有以下几个基本原则
//1.master分支应该是非常稳定的,也就是仅用来发布新的版本,
//2.工作的的分支应该是一个dev分支,
//3.每个人的分支应该是dev分支下面各自新建的分支
//4.等到自己的活干完以后,然后才向dev分支发出合并请求
//bug分支
//在实际的开发中,如果开发过程中有一个bug被发现了,需要立即去修改bug & 但是我们现在的开发还没有完成 & 这时候怎么办呢? & 使用stash功能吧 & 这个命令可以暂存工作现场,& 之后我们就可以临时创建一个分支,用来修改bug,在修改完bug并merge到对应分支后,删除这个临时分支就OK了。
//命令实现
git status
git stash
git checkout master //假定主分支上有个bug要修复
git checkout -b issue-101 //Bug代号为101
git add file & git commit -m "xxx" //修复bug
git checkout master //切换到主分支
git merge --no-ff -m "merged bug fix 101" issue-101 //合并临时分支
git branch -d issue-101 //删除临时分支
git checkout dev //切换到工作分支
git status //查看工作分支是否有要提交的,因为我们保存了现场,需要在stash列表里面恢复,所以在我们没有恢复之前,应该是没有提交的,接下来是恢复现场
git stash list //查看保存的现场列表
git stash pop || git stash apply //用第二种方式恢复以后,stash列表中的现场不会自动删除,需要我们自己使用git stash drop来手动删除;而使用第一种方式在恢复现场的同时,也会把stash列表中保存的现场内容也删除了,很方便
git stash list //再次查看stash列表,确保操作无误
//也可以多次stash,恢复的时候,先使用git stash list查看,然后再恢复,命令如下:
git stash apply stash@{index} //index为list中显示的下标
//Feature分支
//添加新功能时,为了不把主分支搞乱,最好新建一个开发分支,开发分支完成之后,合并,删除feature分支
git checkout -b feature-vulcan //新建分支
git add file & git commit -m "xxx" //完成开发并提交
git checkout dev //切回dev分支,准备合并
git merge --no-ff -m "xxx" feature-vulcan //合并分支
git branch -d feature-vulcan //删除分支
//如果在开发过程中接到上级命令,新功能取消,那么需要省略合并步骤,直接删除该分支
git branch -D feature-vulcan //强制删除该分支,即使修改没有提交
//查看远程库的信息
git remote
git remote -v
//推送分支
git push origin master
git push origin dev
//如果推送失败,因为远程分支比本地更新,需要先使用git pull试图合并
git pull
//如果合并有冲突,则解决冲突,并在本地提交
//如果没有冲突或者解决掉冲突后,再推送到远程仓库
git push origin branch-name
//如果git pull提示“no tracking informatiom",说明本地分支和远程分支的链接关系没有创建,用命令如下:
git branch --set-upstream branch-name origin/branch-name
//克隆指定分支
git clone -b branch-name repo-address
/////////////////////////////////////////////
//下面是标签,主要用来管理版本
/////////////////////////////////////////////
//切换到需要打标签的分支上
git branch //查看分支
git checkout master //假如要打标签的分支是主分支
git tag v1.0 //给当前分支打上标签
git tag //查看当前所有的标签
//如果忘了打标签,现在想起来了,怎么打?
git log --pretty=oneline --abbrev-commit //找出历史提交的commit id
git tag v0.9 123456 //给指定的版本打上标签
git show
git tag -a v0.1 -m "version 0.1 released" 123456 //创建带有说明的标签
//通过-s用私钥签名一个标签,需要先安装gpg
git tag -s v0.2 -m "signed version 0.2 released" 123456
//用PGP签名的标签是不可伪造的,因为可以验证PGP签名。
/标签的管理/
git tag -d v0.1 //删除标签
git push origin v1.0 //推送标签到远程仓库
git push origin --tags //推送所有尚未推送到远程的本地标签
git push origin :refs/tags/v0.9 //推送删除标签到远程repo
//////////////////////////////////////////
//git的配置
//////////////////////////////////////////
git comfig --global color.ui true //显示颜色
//忽略特殊文件
在git的工作目录下创建一个特殊的.gitignore文件,把要忽略的文件丢进去就好了
.gitignore的格式可以仿照https://github.com/github/gitignore书写
//强制添加文件到Git
git add -f filename
//检查哪个规则错了
git check-ignore -v filename
//配置别名
git config --global alias.st status //把status重建别名st
git config --global alias.co checkout //为checkout重建别名co
git config --global alias.ci commit //为commit重建别名ci
git config --global alias.br branch //为branch重建别名br
git config --global alias.unstage 'reset HEAD' //为reset重建别名unstage
git config --global alias.last 'log -1' //为log -1重建别名last,显示最近一次提交的信息
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
//配置文件(.git/config)
//当前用户的Git配置文件(用户主目录下的.gitconfig)
//撤销本地所有修改
git checkout .
///////////////////////////////////////////
//开发到一半,有人给了一个改进的需求,这时候我们就需要保存当前的环境,然后切换到线上环境去解决需求,完成以后重新回到之前的环境继续开发
///////////////////////////////////////////
//如果新的需求和当前修改的代码不在一个模块
//可以先commit代码,不push,然后修改代码完成需求
//但是如果写到一般的代码,就得去改另外一个bug了,这时候就需要保存当前环境了
//将本地的修改暂存到堆栈缓冲区
git stash
git stash save "comment"
//从堆栈缓冲区取出上一次暂存的修改,并应用到当前环境
git stash pop
//列出所有的堆栈缓冲区的修改记录
git stash list
//应用指定版本的环境上下文
git stash apply stash@{?}
/*下面是使用git时候出现的一些问题
1.在新建git时候,选择了add gitignore和add license,然后在本地建好git仓库后,想要把远程仓库和本地仓库关联,失败了(错误为:error: failed to push some refs to 'git@github.com:StivenYang/Blog.git'
)
解决办法:在关联之前要把远程仓库的文件也同步到本地,然后才能进行关联。先使用git pull --rebase origin master,然后再git push -u origin master即可关联并上传本地仓库代码到远程仓库。
2.git乱码问题
https://segmentfault.com/a/1190000000578037 ,项目如果使用utf-8提交的,注意对应的设置应该为utf-8