github详解
git提交状态
示例
本地搭建
- 本地创建并操作
git init:初始化本地仓库
git add .:添加文件
git commit -m “说明”:提交文件
- 状态查看
git diff:查看文件差异
git status:查看本地仓库现阶段状态
git log :查看本分支的提交历史
- 提交参数说明
git add -A :包含所有阶段(新建、修改和删除)
git add . :包括新建、修改 但不包含删除
git add -u :包括修改、删除 但不包含新建
- 差异参数说明
git diff :比较工作区域暂存区
git diff. --cached:比较暂存区域本地版本库
git diff HEAD:比较工作区域本地版本库
git diff commit-id:比较工作区与commit-id的差异
git diff --cached commit -id:比较暂存区与指定
commit-id的差异
git diff commit -id commit -id:比较两个commit-id的差异
上面的命令都可以使用 “>文件名”的形式打补丁
- 版本回退
git reset --hard commit_id:回退到某个版本
git reset --hard head^:回退到上个版本
git reset --hard head~2/font>:回退了两次提交
远程搭建
- git clone 初步(没有本地仓库)重点
远程操作的第一步,通常是从远程主机克隆一个版本库,这时叫用到git clone命令
$ git clone <版本库的网址>
该命令会在本地主机生成一个目录,与远程主机的版本库同名。如果需要指定不同的目录名则可以使用下面命令
$ git clone <版本库的网址><本地目录名>
相当于git remote add <shortname> <url> + git pull <shortname>
git clone 默认会把远程仓库整个给clone下来,但只会在本地创建一个master分支。如果远程还有其他的分支,此时需要用到以下操作:
查看所有分支
$ git branch -a
取回分支
$ git checkout -t origin/dev (建立与远程相同的分支)
或
$ git checkout -b dev origin/dev(他可以为分支重命名)
- git clone 深入(扩展)
可以使用git clone直接下载某分支如下:
$ git clone -b 分支名 --single-branch 仓库URL
如果没有–single-branch 则此命令与 git clone 仓库URL 完全相同
可以结合 --depth num 来获取最近num次的提交
$ git clone --depth 10 仓库URL
$ git clone -b 分支名 --single-branch --depth 10 仓库URL
- git remote(有本地仓库)
查看远程仓库信息
#查看关联的远程仓库的名称
git remote
#查看关联的远程仓库的详细信息
git remote -v
添加远程仓库关联
$ git remote add origin URL
删除远程仓库的关联
$ git remote remove <name>
如果需要修改远程仓库的名称推荐使用默认名称origin,如果需要修改可以修改项目目录下的.git目录中的config配置文件
基本操作
- checkout 详解
起作用主要分为两个
1)切换或新建分支
2)将暂存区或者指定commit内容复制到工作区
切换或者新建分支
$ git branch newBar
$ git checkout newBar
将暂存区内容复制到工作区
$ git checkout 文件名
用指定commit提交的内容覆盖工作区
#将某个版本的内容覆盖工作区内容
$ git checkout commit_id
#将上个版本的内容覆盖工作区内容
git checkout head ^ 文件名
将其他分支提交的内容覆盖本地工作区
$ git checkout 分支名 文件名
- reset详解
对版本区的操作如下:
错误commit后,仅撤销commit;缓存区、工作区内容不变
git reset --soft commit_id
错误commit后,仅撤销commit 和 add ;工作区内容不变
#其与不带参数效果相同
git reset --mixed commit_id
错误commit后,仅撤销commit 、add和工作区都变化
git reset --hard commit_id
git + 文件名 不会对版本区进行更改只会对索引区进行更改(不使用参数)
#将索引区回退到上个版本
$ git reset 文件名
#将索引区回退到指定版本
$ git reset commit_id 文件名
- 修该最后提交的信息
$ git commit --amend -m "more changes -now correct"
- 删除文件
删除还没添加到索引的文件
rm 文件即可
删除添加到索引但还没有提交的文件
#将文件从索引中恢复
git reset 文件名
#将文件删除
rm 文件名
删除已提交的文件
#删除文件
rm 文件名
#提交删除操作
git add -A .
git commit -m "删除文件"
- 恢复文件
恢复尚未add的文件
git clean -f
恢复一个已经add 但是没有commit的文件
#恢复暂存区的状态
$ git reset --hard HEAD
#或者可以采用以下方法
#1)暂存区版本回滚
$ git reset HEAD file1
#2)检出版本
$ git check out file1
分支操作
- git fetch
-
将远程主机的更新,全部取回本地。默认情况下会取回所有分支的更新(所有本地分支默认与远程主机的同名分支建立追踪关系)
git fetch <远程主机名>
-
取回分支
git fetch <远程主机><分支名> #示例: git fetch origin master
-
所有取回的更新,在本地主机上要用"远程主机名/分支名形式读取"
#示例: git checkout -b newBranch origin/master git merge origin/master git rebase origin/master
- git pull
-
格式
git pull <远程主机> <远程分支>:<本地分支> #将origin库的master分支合并到本地的my_test分支上 git pull origin master:my_test
相当于 git fetch 远程主机 远程分支 + git merge
-
省略参数
#远程分支与当前分支合并,则可以将后面的部分省略 git pull origin next #本地的当前分支自动与对应的origin主机"追踪分支"进行合并 git pull origin #当前分支自动与唯一一个追踪分支合并 git pull
-
手动构建追踪关系
git branch --set-upstream master origin/next
- git push
-
格式
git push <远程主机名> <本地分支名>:<远程分支名>
-
省略形式
#将本地分支推送与之存在追送关系的远程分支,如果该分支不存在,则会被创建。 git push origin master #如果省略本地分支则标识删除指定的远程分支,因为其等同于推送了一个空的本地分支到远程 git push origin :master #如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略 git push origin #如果当前分支只有一个追踪分支,则主机名可以省略 git push
-
git merge
#将develop分支合并到feature分支 git check feature git merge develop #将develop 分支合并到feature分支 git merge develop feature
-
git rebase
#将develop分支合并到feature分支 git check feature git rebase develop #将develop 分支合并到feature分支 git rebase develop feature
#注 使用merge与rebase的结果基本相同,但尽量不使用rebase
标签操作
-
本地打标签(不会推送至远程)
$ git tag v1.0 在本地打上标签,并不会自动推送至远程
-
创建带说明的标签
$ git tag -a v0.1 -m "version 0.1 released" 1094adb
-
删除标签
$git tag -d v0.1
-
推送标签到远程
$ git push origin v1.0
-
一次性推送所有未推送的标签
$ git push origin --tags
7、删除远程标签
$ git tag -d v0.9
$ git push origin :refs/tags/v0.9