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
回退某个修改
反转提交,撤销一个提交的同时会创建一个新的提交,也就是用一个新提交来消除一个历史提交所做的任何提交
!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>!-- p.p1>
以上是关于Git的主要内容,如果未能解决你的问题,请参考以下文章