简述
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念
相关专业名词
staged changes:已更改的东西
unstaged changes:未更改的东西
stage 暂存区
工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的dpdk文件夹就是一个工作区:
版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
总结
- git config
git config -l 查看当前git环境详细配置
git config --system --list 查看系统config,配置文件在git安装目录/etc/gitconfig
git config --global --list 查看当前用户配置,配置文件在~/gitconfig
git config --local --list 查看当前仓库配置信息
git config -e 针对当前仓库
git config -e --global 针对系统上所有仓库
- git init && clone
git init 在当前目录新建一个仓库
git init [project-name]在一个目录下新建本地仓库
git clone <repo> 从现有的Git仓库中拷贝项目(类似svn checkout)
克隆到指定目录
git clone <repo> <directory> 参数说明:Gitc仓库 directory 本地目录
比如,要克隆Ruby语言的Git代码仓库Git,可以用下面的命令:
git clone git://github.com/schacon/grit.git
执行该命令后,会在当前目录下创建一个名为grit的目录,其中包含一个.git的目录,用于保存下载下来的所有版本记录。
如果要自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:
git clone git://github.com/scharon/grit.git mygrit
- git diff
git diff HEAD -- ,查看最新本地版本库和工作区所有文件的区别
git diff HEAD --[file-name] 查看最新本地版本库和工作区文件的却别
git diff HEAD^ --[file-name] 查看本地上一个版本和工作区文件的却别
git diff [local branch] origin/[remote branch] 比较本地分支和远程分支的区别
- git status
git status [file-name] 查看指定文件状态
git status -s 查看所有文件状态
- git add
git add [file-name1] [file-name2] ... 从工作区添加指定文件到暂存区
git add . 将工作区的被修改的文件和新增的文件提交到暂存区,不包括被删除的文件
git add -u . u指update,将工作区的被修改的文件和被删除的文件提交到暂存区,不包括新增的文件
git add -A . A指all,将工作区被修改、被删除、新增的文件都提交到暂存区
- git commit
git commit -m [message] 将暂存区所有文件添加到本地仓库
git commit [file-name1] [file-name2] -m [message] 将暂存区指定文件添加到本地仓库
git commit -am [massage] 将工作区的内容直接加入本地仓库
git commit --amend 快速将当前文件修改合并到最新的commit,不会产生新的commit。在提交commit后发现还有部分文件修改忘记提交了可以是用该命令
加-m是指直接在后面写上版本的注释,不加-m的话会用一个vim打开文件让你写入massage,有未追踪的文件将会失败,需要add加入暂存区。
- git reset
git reset命令用于回退版本,可以指定退回某一次提交的版本
语法格式如下:
git reset [--soft | --mixed | --hard] [HEAD]
HEAD 说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
以此类推...
可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
以此类推...
$ git reset HEAD^ # 回退所有内容到上一个版本
$ git reset HEAD^ hello.php # 回退 hello.php 文件的版本到上一个版本
$ git reset 052e # 回退到指定版本
- 创建仓库命令
git init 初始化仓库
git clone 拷贝一份远程仓库,也就是下载一个项目
- 提交与修改
git add 添加文件到暂存区
git status 查看仓库当前的状态,显示有变更的文件
git diff 比较文件的不同,即暂存区和工作区的差异
git commit 提交暂存区到本地仓库
git reset 回退版本
git rm 将文件从暂存区和工作区中删除
git mv 移动或重名工作区文件
- 提交日志
git log 查看历史提交记录
git blame <file> 以列表式查看指定文件的历史修改记录
- 远程操作
git remote 远程仓库操作
git fetch 从远程获取代码库
git pull 下载远程代码并合并
git push 上传远程代码并合并
- 分支管理
git branch (branchname)创建分支命令
git branch 列出分支,没有参数时,git branch 会列出你在本地的分支
git branch -d (branchname) 删除分支命令
git checkout (branchname) 切换分支命令
git checkout -b (branchname) 命令来创建新分支并立即切换到该分支下,从而在该分支中操作
git merge 合并分支命令
- 查看提交历史
git log 查看历史提交记录
git blame <file> 以列表形式查看指定文件的历史修改记录
- git tag 打标签
(6条消息) git 打tag标签_倒骑驴走着瞧的博客-CSDN博客
达到一个重要的阶段,并希望永远记住那个特别的提交快照,,你可以git tag给它打上标签
- 打patch
patch 指令让用户利用设置修补文件的方式,修改,更新原始文件。倘若一次仅修改一个文件,可直接在指令列中下达指令依序执行。如果配合修补文件的方式则能一次修补大批文件,这也是linux系统核心的升级方法之一。
推荐大家使用git的format-patch和am命令进行生成patch和打patch,用此方法获得的patch其实就是commit里提交的code修改以及commit信息
方法一:
git diff > test.patch 生成patch
git diff 文件名 > test.patch 指定某个文件的修改打patch可以使用
git diff --cached > test.patch 已经执行git add 在想打patch可以使用
git apply --check test.patch 查看patch
git apply test.patch 使用patch
对已经提交的代码打patch ,git log 查看那些是需要打ptach的
方法二:
操作步骤:
1、 首先通过git log 查看有那些commit ID,一共提交了多少次
2、 例如一共提交4次,commit A、commit B、commit C、commit D;把第一次或者其他次提交的(不包括第一次提交)都生成patch
git format-patch ID(commit A)
后会生成patch文件,例如00001.patch
3、 在使用git am之前,你要首先git am –abort 一次,来放弃掉以前的am信息。才可以进行一次全新的am
4、 先检查patch文件:git apply –stat 00001.patch
5、 检查能否应用成功:git apply –check 00001.patch
6、 打补丁:git am –signoff < 00001.patch
(使用-s或—signoff选项,可以coomit 信息中加入Signed-off-by信息)
其他用法:
git format-patch 打ptach 这个使用于 已经提交的代码
git format-patch commit_id1 commit_id2 生成patch
git apply --check 系统生成的名字 查看patch
git am 系统生成的名字.patch 应用patch
git format-patch HEAD^ 生成最近的1次commit的patch
git format-patch HEAD^^ 生成最近的2次commit的patch