Git

Posted ray123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Git相关的知识,希望对你有一定的参考价值。

我们知道在工作中git是做项目必须掌握的,那么今天我给大家介绍一下吧!!!

首先先做个简单介绍:

 Git是Linux之父Linus的第二个伟大的作品,它最早是在Linux上开发的,被用来管理Linux核心的源代码。后来慢慢地有人将其移植到了Unix、Windows、Max OS等操作系统中。它是一个开源的分布式版本控制系统,它也是目前世界上最先进的分布式版本控制系统,没有之一用于敏捷高效地处理任何或小或大的项目。Git 不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等。Git是分布式的、Git把内容按元数据方式存储。

 

Git工作流程:

1、git clone 克隆远程资源到本地目录,作为工作目录;

2、然后在本地的克隆目录上添加或修改文件;

3、如果远程修改了,需要同步远程的内容,直接git pull就可以更新本地的文件;

4、本地在修改之后,可以通过git status 查看修改的文件。然后使用git add 添加修改的文件暂到缓冲区;

5、在添加之后,可以使用git commit添加到当前的工作区;

6、git push将本地的修改推送到远程的git服务器。

 

Git工作区、暂存区和版本库:

工作区:就是你在电脑里能看到的目录。

暂存区:一般存放在‘.git目录下的index文件中‘,所以也叫索引。

版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

 

git三种状态:

1、已提交(committed):该文件已被安全地保存在本地数据库。

2、已修改(modified):已修改了某个文件,尚未提交保存。

3、已暂存(staged):把已修改的文件,放在下次提交时要保存的清单中。

 

安装git:

一、在Mac OS X上安装git

1、安装homebrew,然后通过homebrew安装Git,

2、第二种方法更简单,也是推荐的方法,就是直接从AppStore安装Xcode,Xcode集成了Git,不过默认没有安装,你需要运行Xcode,选择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了

二、在window安装git

     可以从Git官网直接下载安装程序 (https://git-scm.com/downloads

 

git的配置:

  git config  专门用来配置或读取相应的工作环境变量。

  用户信息:首先 git config --global user.name ‘你的名字或昵称‘  git config --global user.email 作用告诉git你是谁  2 、git config        user.name  git config user.email‘ 使用下面命令是否配置成功。

  查看配置信息:git config --list

 

获取帮助:

1、git help <verb>

2、git <verb> --help

3、man git-<verb>

 

创建Git仓库:

1、mkdir learnight 

2 cd learnight 

3 pwd (显示当前目录)

 

git init:

Git使用git init 命令来初始化一个Git仓库,Git的很多命令都需要在Git的仓库中运行,所以git init 是使用Git的第一个命令。在执行完成git init命令后,Git仓库会生成一个.git目录,该目录包含了资源的所有元数据,其他项目目录保持不变。

.git目录:

1、hooks(hooks(钩):存放一些shell脚本)

2、Info:exclude:存放仓库的一些信息

3、ogs:保存所有更新的引用记录 

4、objects:存放所有的git对象

5、refs文件下heads:保存当前最新的一次提交的哈希值

6、COMMIT_EDITMSG:最新提交的一次Commit Message,git系统不会用到,给用户一个参考

7、description:仓库的描述信息,主要给gitweb等git托管系统使用

8、config:git仓库的配置文件

9、index:暂存区(stage),一个二进制文件

10、FETCH_HEAD: 是一个版本链接,指向着目前已经从远程仓库取下来的分支的末端版本

11、HEAD:映射到ref引用,能够找到下一次commit的前一次哈希值(看上面logs的图)

12、ORIG_HEAD:HEAD指针的前一个状态

13、 packed-refs:当更新一个引用时,git不会packed-refs,而是会在refs/heads下写入一个新文件。当查找一个引用时,git首先在refs目录下查找,如果未找到则到packed-refs文件中去查找。

 

git clone:

如果你想获得一份已经存在了的Git仓库的拷贝,就用git clone

命令格式:git clone [url] (Git仓库)  如果需要克隆到指定的目录,可以使用一下命令格式:git clone [url]  本地目录

注意:

1、http://github.com/CosmosHua/locate new  =  http://github.com/CosmosHua/locate.git new  =            git://github.com/CosmosHua/locate new = github.com/CosmosHua/locate.git new

 2、git clone 时,可以用不同的协议,包括ssh、git、https等,其中最常用的是ssh,因为速度较快,还可以配置公钥输入密码

 

git add 

该命令可将改文件添加到缓存

新项目中,添加所有文件很普遍,我们可以使用git add. 命令来添加当前项目所有文件

 

git status

该命令用于查看项目的当前状态,接下来我们执行git add命令,然后在执行git status看到已经提交上去了

 

git diff

执行该命令来查看执行git status的结果的详细信息,该命令显示已写入缓存与已修改的改动的区别

1、尚未缓存的改动:git diff   

2、查看已缓存的改动 git diff --cached  

3、查看已缓存的与未缓存的所有改动:git diff HEAD

4、显示 摘要而非整个diff:git diff --stat

 

git commit

使用git commit 将缓存区内容添加到仓库中

这时候我们在执行git status:会出现(working directory clean:干净的工作目录)。

如果你没有设置-m选项,Git会尝试为你打开一个编辑以填写提交信息。如果Git在你对它的配置中找不到相关信息,默认会打开vim。

如果你觉得git  add 提交缓存流程太过繁琐,git 也允许你用 -a选项跳过这一步。git commit -a。

 

git commit 、git push、git pull、git fetch、git merge的含义与区别:

git commit :是将本地修改过的文件提交到本地库中

git push:是将本地库中的最新信息发送给远程库

git pull :是远程获取最新版本到本地,并自动merge

git fetch:是从远程获取最新版本到本地,不会自动合并merge

git  merge 是从指定的commit(s)合并到当前分支,用来合并两个分支  git merge -b 指将 b分支合并到当前分支

 

git branch:

创建分支:git branch <name>

git branch 没有 参数时,会列出你在本地的分支  

删除分支:git branch -d

 

git checkout:

既可以操作分支,也可以操作文件

切换分支:

git switch 或  git checkout

创建并切换分支 :

git checkout -b   git switch -c     

回退修改:

git checkout --fileName 这条命令把fileName从当前HEAD中检出,也就是回退到当前工作区的这个文件的修改

--可以省略不写。如果需要回退工作区的全部文件修改,可以使用:

git checkout --hard HEAD

而不需要对每个文件进行checkout,这样太累

 

git reset 

回退版本,git reset HEAD^一个^表示一个版本,可以多个,另外也可以使用git reset HEAD~n这种形式。 也可以回退到指定版本:git reset commit-id

1、soft参数:git reset --soft HEAD~1意为将版本库软回退1个版本,所谓软回退表示将本地版本库的头指针全部重置到指定版本,且将这次提交之后的所有变更都移动到暂存区

2、默认的mixed参数:git reset HEAD~1 意为将版本库回退1个版本,将本地版本库的头指针全部重置到指定版本,且会重置暂存区,即这次提交之后的所有变更都移动到工作区

3、hard参数:git reset --hard HEAD~1意为将版本回退1个版本,但是不仅仅是将本地版本库的头指针全部重置到指定版本,也会重叠暂存区,并且会将工作区清空(工作区是clean状态)

注意:soft参数与默认参数都不会修改工作区代码,只有hard参数才会修改工作区代码

 

git rm

git rm -r *:进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录

git rm --cached<file>:如果把文件从暂存区域移除,但希望保留在当前工作目录,换句话说,仅是从跟踪清单中移除,使用--选项即可

git rm -f <file> :如果删除之前修改过并且已经放到暂存区的话,则必须要用强制删除选项-f

git rm <file>:如果只是简单地从工作目录手工删除文件,运行git status时就会在Change not staged for commit的提示,要从Git中移除某个文件,就必须要从以跟踪文件清单中移除,然后提交。

 

git mv

git mv README  README.md    ls    README.md

该命令用于移动或重名一个文件、目录、软连接

 

git log 

查看提交的历史记录

git log --author:如果只想查找指定用户的提交日志可以使用命令

如果你要指定日期,可以执行几个选项:--since和--before,也可以用 --util和 --after

git log --graph 查看历史中什么时候出现了分支、合并。以下为相同的命令,开启了拓扑图选项

git log  --oneline选项查看历史记录的简洁的版本

 

git tag

在git 中打标签非常简单,首先,切换到需要打标签的分支上,然后。敲命令git tag v1.0 <name>,可以用git tag  查看所有标签

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以标签也是版本库的一个快照。

如果标签打错了,可以在本地删除:git tag -d v0.1,如果标签已经推送到远程,要删除远程标签就麻烦一些,先从本地删除,然后从远程删除。删除命令也是push git push origin :refs /tags/v0.9,要看是否真的从远程删除了标签,可以登陆GitHub查看

 

git stash

所有未提交的修改都保存起来,用于后续恢复当前工作目录

git stash save "stash_name" 给每个stash加一个message,用于记录版本

git stash list查看现有所有stash

在使用git stash pop(apply)命令时可以通过名字指定使用哪个stash,默认使用最近的stash

git stash drop:移除最新的stash,后面也可以跟指定stash的名字

 

git reflog

如果在回退以后又想再次修改回到之前的版本,git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log 则不能看已经删除了的commit记录

 

git revert 

回退某个修改

反转提交,撤销一个提交的同时会创建一个新的提交,也就是用一个新提交来消除一个历史提交所做的任何提交

 

 

 

  

 

 

以上是关于Git的主要内容,如果未能解决你的问题,请参考以下文章

Git 学习路线

从0到1带你掌握git(一分钟掌握git)--git如何下载?git如何使用?git是什么?git怎么获取文件?

Git认识与使用 Git

Git认识与使用 Git

Git认识与使用 Git

Git认识与使用 Git