Git 原理与使用

版本操作

工作区有一个隐藏目录 .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 两分支内容合并

clonepull的区别

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

 https://www.cnblogs.com/tinywan/p/12344267.html

 https://www.cnblogs.com/tangxuliang/p/11950995.html

原文地址:https://www.cnblogs.com/kaster28/p/13151514.html