安装Git
- git config --global user.name "Your Name" : 添加名字
- git config --global user.email "[email protected]" :添加邮箱地址
创建版本库
- 创建一个空目录 mkdir <dirname>
- git init :将新创建目录(第一步创建的目录)变成Git可以管理的仓库
- git add <filename> :将filename文件添加入到本地仓库中(也可以使用通配符,比如:git add . 将本目录下的所有文件添加到本地仓库中)
- git commit -m "提交说明信息" :把文件提交到仓库(最好添加说明信息,这样可以有助于别人的阅读),commit命令一次可以提交多次的add命令添加的文件
时光穿梭机
- git status : 查看仓库当前状态
- git diff <filename> :查看filename文件的修改内容(提交修改后文件也使用git add命令)
版本回退
- git log : 查看最近到最远的提交日志(命令后可以添加参数git log --pretty=oneline简化显示的提交日志信息)
完整提交信息截图:
简化显示信息后截图:
(说明:每个显示出来的一条记录中前面的一串编码(SHA1计算得出的编码)(如:7a5aa523385ae2b525a83247eac85c1a3d2bab86 )称为commitid (版本号))
2. git reset --hard commitid/????????????????^∗ : 回退到 指定版本号/????????????????^∗(其中^*表示向上一个或多个版本号,^表示1,^^表示2,^~100表示100)
3. git reflog : 用来记录过去的每一次命令
工作区和暂存区
特别说明
工作区有一个隐藏目录.git,这个不算工作区,而是 Git 的版本库.Git 的版本库里存了很多东西,其中最重要的就是称为 stage(或者叫 index)的暂存 区,还有Git为我们自动创建的第一个分支 master,以及指向 master 的一个指针叫 HEAD
整个Git操作流程图解如下:
git diff HEAD -- readme.txt : 查看工作区和版本库里最新版本的区别
撤销修改
在未添加至暂存区时
git checkout -- filename : 表示丢弃工作区的修改(没有中间的"--"时表示切换到另一个分区)
在执行git add添加至暂存区且未commit时
1. git reset HEAD filename :表示把暂存区的修改撤销掉(unstage),重新放回至工作区(HEAD 表示最新版本)
2. 与第一种情形的操作相同
在执行commit之后将修改提交至版本库且未推送至远程库时
git reset --hard HEAD^ : 表示回退至上一版本
删除文件
1. git rm filename :将文件从版本库中进行删除
git commit -m "remove filename" : 提交修改
2. git checkout -- filename : 用版本库中的版本替换工作区的版本,无论工作区是修改还是删除, 都可“一键还原”
添加远程库
git remote add origin <远程库地址> :关联一个远程库
git push -u origin master 第一次推送master分支的所有内容
以后每次本地提交后,只要有必要,就可以使用命令 git push origin master推送最新修改
从远程库克隆
git clone 远程库地址 : 将远程库克隆一个本地库
说明:多人协作开发,团队每个人各自从远程克隆一份
Git支持多种协议,包括https,但通过ssh支持的原生git协议速度最快
分支管理
对个人项目进度的保存具有重要意义,这样不影响其他人的工作
创建分支与合并分支
git checkout -b branchname : 创建并切换分支branchname
等价于
git branch branchname
git checkout branchname
git branch :表示查看当前分支(当前分支前会加上 * 号)
在新建分支中对文件进行修改及提交,并不影响其他分支
git merge branchname :将branchname分支的合并到master分支上
git branch -d branchname : 将branchname分支删除掉
由于创建、合并和删除分支非常快,Git 建议使用分支来完成某项任务,然后再删除分支,这和直接 在master分支上工作的效果是一样的,但过程更安全.
解决冲突
创建一个新分支后对于主分支中相同的文件内容作出不一致的修改后进行提交,
git merge branchname 进行分支合并后会产生冲突,git status 来查看产生冲突的文件,之后将产生冲突的文件进行修改,在master分支进行add 和 commit 操作后,到此合并分支完成.
git log --graph --pretty=oneline --abbrev-commit 查看分支合并情况,最后再执行
git branch -d branchname 删除分支
分支管理策略
fast forward 模式进行分支合并时,在这种模式下,删除分支后,会丢掉分支信息
git merge --no-ff -m "<information>" branchname : 使用 no-ff 方式合并,带上-m参数是由于本次合并要创建一个新的commit ,故需要加上 -m 参数,把commit描述写进去
git log --graph --pretty=oneline --abbrev-commit :禁用fast forward 模式进行合并后的可以显示过往的分支合并历史
Bug分支
新建bug分支,git stash 保存工作现场,bug修复后再合并分支,删除bug分支
Feature分支
git branch -D <branchname> : 丢弃一个没有被合并过的分支,进行强行删除
多人协作
git remote :查看远程库信息
git remote -v : 查看远程库详细信息
git push origin branchname :推送本地branchname分支至远程库
master分支是主分支,必须时刻与远程同步
dev 分支是开发分支,团队所有人员都需要在上面工作,所以也需要在远程同步
bug分支只用于在本地修复bug,无须推送至远程库
git clone 远程库地址 :将远程库进行克隆到本地,默认情况下只能查看本地的master分支
git check -b branchname origin/branchname : 创建远程origin的branchname分支到本地
冲突解决: 当两个以上人对相同分支进行了修改并提交了修改,此时会报错;如何解决? 1.git pull
把最新的提交从 origin/branchname 抓取下来,然后在本地合并,解决冲突之后在推送至远程库
解释:
git branch --set-upstream branchname origin/branchname : 设置本地branchname origin/origin 的分支
git pull :抓取
多人协作模式:
git push origin branchname :推送自己的修改
如果远程分支比你本地更新,需要先git pull 后合并;若合并遇到冲突,则解决冲突,并在本地提交
如果 git pull 提示 "no tracking information" 说明本地分支和远程分支的链接没有创建,用git branch --set-upstream branchname origin/branhcname