版本操作
工作区有一个隐藏目录 .git叫做Git的版本库,这里存了很多东西,其中最重要的称为stage(或index) 的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫做HEAD。相应的图示如下图所示:
则将文件往Git版本库添加时,分两步执行:
第一步用git add把文件添加进去,实际上就是把文件修改提交到暂存区;第二步是用git commit提交修改,实际上就是把暂存区的所有内容提交到当前分支。
#git commit -m '注释' 缓存提交至项目分支(-m为注释指令)
注:因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,现在的git commit就是往master分支上提交更改。在我们每次修改后,如果不用git add到暂存区,那就不会加入到commit中。
#git status 查看缓存区中文件
#git log 查看现有版本号
版本回退
#git reset --hard [id] 使HEAD指针滚至特定版本(id为版本id,reflog可查)
#git reset --hard head^ 返回上一版本
#git reflog查看全部操作
对工作区进行撤销操作
暂存区覆盖工作区
#git restore [文件名]
#git checkout -- 【文件名】在git2.23版本已被restore替换
分支提交区(HEAD所指版本覆盖暂存区)
#git reset head
所以如果想让工作区回退到某一版本
一步到位 git checkout head 【文件名】
或者可以:
1.使head指向特定版本
2.reset分支版本覆盖缓存区
3.restore缓存覆盖工作区
远程仓库
#git remote -v 查看当前远端地址
#git remote add 【库名,一般为origin】 [特定库的ssh链接]
首次上传到库用
#git push -u 【库名,一般为origin】 master
之后可以简化成
#git push 【库名,一般为origin】 master
删除路径
#git remote rm 【库名,一般为origin】
远程库克隆到本地
#git clone [特定库的ssh链接]
删除远端库数据
1. 把远端数据先拉到本地库 #git pull
2. #git rm -r . 清除所有文件
#git rm [文件名] 清除特定文件
3. #git commit -m 'xxxx'
4. #git push
git clone
git clone 是将其他仓库克隆到本地,包括被 clone 仓库的版本变化,因此本地无需是一个仓库,且克隆将设置额外的远程跟踪分支。因为是克隆来的,所以 .git 文件夹里存放着与远程仓库一模一样的版本库记录,clone 操作是一个从无到有的克隆操作。可以理解为远端仓库的一个本地映射
$ git clone <版本库的URL> [本地目录名]
如果不指定本地目录,则会在本地生成一个远程仓库同名的目录。
git pull
git pull 是拉取远程分支更新到本地仓库再与本地分支进行合并,即:git pull = git fetch + git merge
$ git pull <远程主机名> [远程分支名]:[本地分支名]
如果不指定远程分支名和本地分支名,则会将远程 master 分支拉取下来和本地的当前分支合并。
$git fetch 从远端获取数据
$git merge 两分支内容合并
clone和pull的区别
1. 是否需要本地初始化仓库
git clone 不需要,git pull 和 git fetch 需要。
2. 是否可以指定分支推送到远程
git clone下来的项目可以直接推送到远程,git pull 和 git fetch 需要先执行 git remote add 添加远程仓库后才能 push。
*head detached at 怎么解决?
解决方式见 <https://zhidao.baidu.com/question/1386681614058015020.html>
参考材料:
https://blog.csdn.net/edj_13/article/details/104548375
http://www.360doc.com/content/17/0215/15/17572791_629200351.shtml