git使用手册

一、安装git
运行git bash
二、创建版本库(仓库)reposity,并提交文件
 
#新建文件夹
mkdir learngit
cd learngit
#显示当前目录
pwd
#将目录变为git仓库,生成 .git 文件(git用来跟踪管理版本库)
git init
#显示文件夹中所有文件(包括隐藏文件)
ls -ah
#将文件添加到git仓库,支持一次添加多个文件
git add reademe.txt
#将文件提交到仓库,支持多次添加,最后统一提交
git commit -m "create reademe.txt"
 
git commit命令中,-m后面输入的是本次提交的说明,方便查阅。
 
三、修改文件
修改文件后:
 
#查看仓库状态,modified会告知那些文件修改了
git status
#查看修改内容
git diff
#添加
git add reademe.txt
#可以再次查看仓库状态
git status
#提交
git commit -m "change file"
#再次查看仓库状态,此时为 nothing to commit
 
四、时光机穿梭
1、版本回退
 
 #显示从最近到最远的提交日志
git log
#已版本号的方式显示提交日志
git log --pretty=oneline
#回退到上一个版本
git reset --hard HEAD^
#回退到某一个版本(版本号可以不写完整)
git reset --hard 3628164
#查看历史命令,以便回到过去版本后再恢复到未来的某个版本
git reflog
 
HEAD表示当前版本
HEAD^表示上一个版本
HEAD^^表示上上个版本
HEAD~100 表示第几个版本
 
2、工作区和暂存区
①工作区:电脑中能看到的目录。
②版本库:工作区中有一个隐藏的目录 .git,这个不算是工作区,而是git的版本库。
③暂存区:又称state,存在于版本库中。
④分支:存在于版本库中,git会默认创建一个master分支。
⑤指针:又称HEAD,存在于版本库中,默认指向master分支。
 
git add命令就是将文件添加到暂存区,git commit就是将暂存区的所有文件,一次提交到HEAD指向的分支上。因此,文件修改必须先add到暂存区,再commit到仓库。
git add 和 git commit是将修改分别同步到暂存区和仓库,并不会将暂存区的内容清除。
如果一个文件未曾被添加到暂存区过,则git status查看仓库状态时,此文件为 untracked。
 
#对比工作区和暂存区的不同
git diff
#对比暂存区和分支的不同
git diff --cached
 
3、撤销修改
 
#将文件回退到最近一次git commit 或git add时的状态
git checkout -- reademe.txt
-- file 很重要,如果没有就变成了另一个“切换到另一个分支”的命令。
 
4、删除文件
 
#删除本地文件
rm test.txt
#从版本库恢复删除文件
git checkout -- test.txt
#从版本库删除
git rm test.txt
 
无论是修改还是删除,git checkout 其实是用版本库中的版本替换工作区的版本。
 
五、分支管理
1、分支操作
 
#查看分支,其中带*为当前分支
git branch
#创建分支,创建的分支与当前分支内容一致
git branch <name>
#切换分支
git checkout <name>
#创建+切换分支
git checkout -b <name>
#合并某分支到当前分支
git merge <name>
#删除分支
git branch -d <name>
#查看分支合并图
git log --graph
 
HEAD永远指向当前分支,合并分支实际是将当前分支指向要合并的分支的指向。
当git无法自动合并分支时,必须先解决冲突。冲突解决后,再提交,合并完成。
 
2、分支合并模式
Fast forward模式:通常合并分支时,如果可能,git会用Fast forward模式,这种模式下,删除分支,会丢掉分支信息。
普通模式:用--no-ff 禁用Fast forward模式,git会在merge时生成一个新的commit,这样从分支历史上就能看到分支的信息。
 
#合并分支,并创建一个新的commit,所有用-m参数,添加版本描述
git merge --no-ff -m "merge with no-ff" dev
#查看分支历史
git log
3、分支策略
master分支:应该是非常稳定的,也就是仅用来发布新版本,平时不能在此分支开发。
dev分支:用于平时开发,是不稳定的,等到发布新版本时,再合并到master上。
每个开发者都在dev分支进行开发,那每个人都有自己的分支,再时不时的往dev上合并即可。
4、bug分支
举个栗子:
如果在master分支上有一个代号为101的bug,但是你在dev分支上的开发还没有完成,不能提交。那如何完成bug修改,并且不影响现有开发?
第一步:保存工作现场
#把当前工作现场“储藏”起来,等以后恢复现场后继续工作
git stash
#stash后,git status查看工作区就是干净的,可以放心的创建分支
git status
 
第二步:修改bug
#确定在哪个分支上修复bug,即切换到哪个分支
git checkout master
#从 master分支创建临时分支,并切换
git checkout -b "issue-101"
#修复完成后,提交,此时提交到issue-101分支
git add reademe.txt
git commit -m "fix bug 101"
#测试端bug验证完后,切换到master分支,完成合并删除issue-101
git checkout master
git merge -no-ff -m "merged bug fix 101" issue-101
git branch -d issue-101
 
第三步:恢复现场
#修改完bug了,现在恢复dev的工作区
git checkout dev
#此时工作区还是干净的
git status
#查看stash list 工作现场的保存
git stash list
#两种恢复工作现场方法
#第一:恢复后,stash内容不删除,再手动删除
git stash apply
#删除stash内容
git stash drop
#第二种:恢复的同时,删除stash内容
git stash pop
 
切换分支及创建分支时,要保证工作区的状态是干净的,即都当前修改均已提交到git仓库。因为,切换分支后,未提交仓库的修改将不被保留。
 
5、feature分支
feature:开发中用于开发新功能的分支。
 
#新建分支
git checkout -b feature-1
#开发完毕后,提交
git add reademe.txt
git commit -m "add feature-1"
#合并到dev分支
git checkout dev
git merge --no-ff -m "fix feature-1" feature-1
#若开发过程中,新功能取消,删除未合并的分支
git branch -D feature-1
 
6、多人协作
 
#查看远程库信息,远程库的名称默认origin
git remote
#远程库更详细信息,抓取和推送的远程地址
git remote -v
#推送分支,指定本地分支,会将该分支所有本地提交到远程库对应分支上
git push origin master
 
master:主分支,要时刻与远程同步
dev:开发分支,团队所有成员都需在上面工作,所以需要远程同步
bug:只用于本地修复bug,没必要推到远程
feature:是否推到远程,取决于你是否与你的小伙伴合作开发
 
#抓取分支
#克隆
git clone git@github.com:michaelliao/learngit.git
#从远程库clone时,只能看到本地的master分支
#查看分支
git branch
#想要在dev分支开发,必须创建远程origin的dev分支到本地
git checkout -b dev origin/dev
#开发工程中是不是把dev分支push到远程
git add reademe.txt
git commit -m "add"
git push origin dev
#如果同时修改同一文件,push失败,就要先pull
git pull
#如果pull失败,原因为没有指定本地dev与远程origin/dev的链接,“no tracking information”
git branch --set-upstream dev origin/dev
#再pull
git pull
#解决完冲突,再提交,上传
 
六、标签管理
标签:发布一个版本是,通常在版本库中打一个标签tag,其实是指向某个commit的指针,(分支也是指向commit的指针,但是分支可以移动,标签不能),标签跟某个commit绑定在一起,为了方便查找某个固定的版本,如使用标签tag v1.2 ,而不是使用某个commit 6a5819e。
1、创建标签
 
#切换到需要打标签的分支
git checkout master
#打一个新标签,默认标签是打在最近的commit上
git tag v1.0
#对历史commit,打标签
git tag v0.9 6224937
#查看所有标签,标签按字母排序
git tag
#查看标签详情
git show v0.9
#创建带有说明的标签,-a指定标签名,-m指定说明
git tag -a v0.1 -m "version 0.1 released" 32534344
 
2、操作标签
#删除标签
git tag -d v0.1
#推送标签到远程
git push origin v1.0
#一次性推送全部尚未推送到远程的本地标签
git push origin --tags
#如果删除推送到远程的标签
#先删除本地标签
git tag -d v0.9
#再删除远程标签
git push origin :refs/tags/v0.9
 
七、自定义git
1、.gitignore文件
添加忽略文件
 
2、配置别名
例如: --global 是全局参数,也就是这些命令可以在这台电脑的所有git仓库下应用
 
#git status -> git st
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch
#git reset HEAD file将暂存区的修改撤销,即unstage,相当于将工作区将文件git add的这边操作撤回,工作区仍保持不变
git config --global alias.unstage 'reset HEAD'
#使用别名
git unstage test.txt
#显示最后一次提交信息
git config --global alias.last 'log -1'
#使用不同颜色显示log信息
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 文件中,别名再【alias】后面,如果要删除别名,直接把对应的行删掉即可。
 
 
 
 
 
 
posted @ 2017-03-17 17:32  Lily~~  阅读(303)  评论(0编辑  收藏  举报