博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Git学习笔记
阅读量:5936 次
发布时间:2019-06-19

本文共 6619 字,大约阅读时间需要 22 分钟。

Git是Linux之父Linus开发的分布式代码管理工具,也是目前最流行的开源代码管理工具。许多开源项目,包括

Linux,U-Boot等等都在使用Git进行代码管理。

1.Git安装

Ubuntu下直接在shell下面运行:

sudo apt-get install git
Windows下直接去下面网站下载msysgit(包含一个命令行界面和一个GUI界面):
http://code.google.com/p/msysgit/downloads/

2.Git使用帮助

2.1所有支持的命令

git help

对于某个命令,例如config
git help config
git config --help
注意:git支持TAB键补全,包括命令和变量。对Linux用户,如果该功能没打开,可以在~/.bashrc中加入:

# Enable Git command auto-completion

source /etc/bash_completion.d/git

然后在shell中重新执行bash命令。

2.2 提交ID或者各种标签(HEAD,tag, stash@{n},branch名称等等,本质上都是提交ID)的后缀

^或者^1或者~或者~1:当前提交的第一个父提交

^2:当前提交的第2个父提交,如果该提交有多个父提交(merge或者stash(工作进度暂存)引起的)
^^或者~2:当前提交的第一个父提交的第一个父提交
^2^或者^2^1:当前提交的第2个父提交的第一个父提交
^{}或者^{commit}:当前提交的提交ID
^{tree}:当前提交的树ID
范围形参数的表示方法:rev1..rev2

2.3 diff结果阅读

结果:

diff --git a/src/test.txt b/src/test.txt
index ff0303a..3ccac05 100644
--- a/src/test.txt
+++ b/src/test.txt
@@ -1,3 +1,3 @@
+modified
-orign
+tested
解释:
--- a/src/test.txt :原始文件(以---开头)
+++ b/src/test.txt :目标文件(以+++开头)
@@ -1,3 +1,3 @@ :当前差异块的比较对象为原始文件的第1行开始的3行与目标文件的地1行开始的3行
-orign :只存在于原始文件(以-开头)
+modified :只存在于目标文件(以+开头)
以空格开头 : 同时存在于原始文件和目标文件

2.4 merge结果阅读

<<<<<<<

当前分支
=======
待合并的分支
>>>>>>>

3.Git配置(可选)

git config -l 显示所有用户配置

git config --global user.name 用户姓名
git config --global user.email 用户邮箱

git config --global color.ui auto

git config --global merge.tool kdiff3

git config --global diff.external kdiff3
git config --global core.editor vim

git config --global --unset xxxxx

4.创建数据库(服务器上)

建立一个用于提交代码的共享数据库,在服务器上没有本地文件

git init --bare --shared=all 项目名称(xxx.git)

5.克隆一个本地分支

git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

6.日常用法

6.1 显示状态

详细信息(包括本地分支和远程分支的关系等等,如果领先远程分支,可用git cherry获取未push到远程分支

的本地提交;如果落后,则需执行git pull)
git status
简单信息
git status -sb

6.2 把代码加入到暂存区

指定文件或者目录加入到暂存区

git add 目录或者文件名
工作区中所有改动和增删文件(包括untracked文件,可以新增文件)加入到暂存
git add -A
更新工作区中所有tracked文件的改动到和删除到暂存区
git add -u
交互式
git add -i 目录或者文件名
patch模式添加文件
git add -p 目录或者文件名

6.3 从暂存区提交到本地数据库

git commit -m 注释

或者启动默认编辑器编辑注释
git commit
追加或者更改上一次提交的注释
git commit -amend
重用某次提交的注释
git commit -C 提交ID或者标签
跳过add命令直接提交代码(修改不经过暂存区,无确认过程,轻度危险,尽量不要使用)
git commit -a

无代码修改提交(通常用于创建代码仓库后的第一个提交

git commit --allow-empty

6.4 文件操作

删除某个文件

git rm 文件名或者目录名

移动或者更名文件

git mv

汇总显示工作区、暂存区与HEAD差异

git checkout
用暂存区内容覆盖工作区(危险,可在后面加上 > xxx 另存到其他文件)
git checkout 文件名
用指定提交的文件替换暂存区和工作区内容(危险,可在后面加上 > xxx 另存到其他文件)
git checkout 提交ID或者标签 文件名
替换所有本地文件(极度危险)
git checkout .

6.5 显示修改记录

6.5.1 整个数据库的修改记录

git log

图形化显示并跟踪修改(显示当前提交ID,目录树ID和父提交ID(可能会有多个父提交))
git log --pretty=raw --graph
单行图形化显示
git log --graph --oneline
显示数据库内文件移动复制记录
git log -C -C -l -p
显示所有提交修改概要
git log --stat
显示详细信息
git log --pretty=fuller
显示指定提交修改概要
git show 提交ID或者标签 --stat

6.5.2 某个文件修改记录

git blame -L 起始行,结束行 文件名

git blame -L 起始行,+行数 文件名
文件内移动复制记录
git blame -M 文件名 

6.6 比较

比较工作区与暂存区中的文件

git diff 文件名
比较工作区与某个提交
git diff 提交ID或者标签 文件名
比较暂存区与某个提交中文件
git diff --cached 提交ID或者标签
比较2个版本(不加文件名表示比较所有文件)
git diff 提交ID或者标签 提交ID或者标签 文件名
生成patch
提交后:git diff -c -p HEAD^ > patch_xxx.txt
提交前:git diff -c -p HEAD > patch_xxx.txt
逐字比较(默认逐行)
git diff --word-diff 文件名
使用外部比较
git --ext-diff 文件名

6.7 保存和恢复工作进度

保存暂存区河工作区中的tracked文件

git stash
保存暂存区河工作区中的tracked文件并包括注释
git stash save “xxxxx”
查看工作进度缓存
git stash list

查看某个缓存的内容

git stash show stash@{进度ID}

恢复工作进度

git stash pop stash@{进度ID}
git stash apply stash@{进度ID}
清除工作进度
git stash clear

6.8 数据库交互

从远程仓库获取分支信息和修改但不合并

git fecth

从服务器取数据并合并到本地数据库

git pull
提交某个分支代码到服务器数据库
git push origin 分支名称或者tag名称

6.9 patch操作

生成summary,为每个提交生成一个detail patch,并签名

git format-patch --cover-letter -s 起始提交ID或者标签..结束提交ID或者标签
应用patch
patch -p1 < xxx.patch

7.分支操作(可选)

显示所有分支和当前工作分支详细信息(名字,修改记录,提交ID)

git branch -v
从某个提交创建分支并切换到新分支(主分支可用来跟服务器同步)
git checkout -b 分支名称 提交ID或者标签(可省略,默认为HEAD)
切换分支
git checkout 分支名称
rebase当前分支
git rebase --onto master 当前分支
从其他分支merge到当前分支
git merge 其他分支
出现merge冲突后对启动图形界面
git mergetool 文件名(可选)
删除分支(分支必须先merge到其他分支,否则失败)
git branch -d 欲删除分支
强制删除分支(不检查分支已是否merge到其他分支)
git branch -D 欲删除分支
重命名分支
git branch -m 新名称
查看远程分支
git branch -r -v

建立远程分支

git push -u origin <本地分支>

8. 版本库查看

显示暂存区(最新提交)中的文件

git ls-files
显示指定提交中的文件
git ls-files --with-tree=提交ID或者标签
显示版本库目录树
git ls-tree -l -r -t 提交ID或者标签
显示暂存区目录树
git write-tree | xargs git ls-tree -l -r -t
查看目录树中某个对象的内容(blob对象存放文件内容)
git cat-file -p 对象ID
或者 (对象类型包括commit, tree,tag or blob)
git cat-file 对象类型 对象ID
查看某个命名版本中(例如分支名称或者HEAD)某个对象的内容
git cat-file blob HEAD:文件路径
查看某个分支或者某次提交的commitID
git rev-parse 提交ID或者标签

9.版本库操作(小心使用)

首先执行下面命令确保分支日志功能打开

git config core.logAllRefUpdates
不更新HEAD指针仅用目的版本的某个文件内容替换暂存区中的文件
git reset 提交ID或者标签(HEAD^, HEAD~1等等) 文件路径
将HEAD指针回溯到某个历史提交
git reset --soft 提交ID或者标签(HEAD^, HEAD~1等等)
将HEAD指针回溯到某个历史提交并用目的提交的内容替换暂存区内容
git reset 提交ID或者标签(HEAD^, HEAD~1等等)
或者
git reset --mixed 提交ID或者标签(HEAD^, HEAD~1等等)
将HEAD指针回溯到某个历史提交并用目的提交的内容更新暂存区和工作区
git reset --hard 提交ID或者标签(HEAD^, HEAD~1等等)
显示版本操作日志
git reflog show
逆向恢复到某次操作后的状态(例如倒数第3次)
git reset master@{2}

10.分离头模式查看历史版本

checkout某个历史版本用以查看内容、测试和提交

(当前分支和HEAD指针指向不同的引用git rev-parse查看,切换回当前分支后HEAD指针恢复)
git checkout 提交ID或者其他代号(HEAD^, HEAD~1等等)
查看在分离头模式中做的修改
git show 提交ID
merge到当前分支
git merge 提交ID

11.标签tag

打标签

git tag -m "xxxx" tag名称
打签名标签(GnuPG签名,包括创建时间、创建者等等,可用git tag -v验证,签名可用gpg --gen-key生成)
git tag -m "xxxx" tag名称
删除
git tag -d tag名称
显示当前标签(输出可用作版本号)
git describe
查看所有tag
git tag -n
查看某个tag
git show tag名称
或者
git cat-file tag tag名称
显示带标签的日志
git log --oneline --decorate
更新到远程服务器
git push orign tag名称
查看远程服务器的tag
git ls-remote origin
删除远程服务器上的tag
git push orign :tag名称

12.二分法查找错误提交

开始

git bisect start
标志坏提交
git bisect bad 提交ID
标志好提交
git bisect good 提交ID
查看log
git bisect log

13.删除错误提交

13.1 cherry-pick方式

13.1.1 checkout错误提交的前一个提交

git checkout 错误提交ID或者其他代号^

13.1.2 找出所有需要的版本

git cherry-pick 提交ID或者其他代号

13.1.3 重置版本树到最近一次提交(修改后的)

git checkout 当前分支名称

git reset --hard HEAD@{1}

13.2 rebase方式
13.2.1.手动模式

git rebase --onto <newbase> <since> <till(不写则为HEAD)>

该命令执行过程:
1.用checkout切换到<till>
2.将 <since>和<till(不写则为HEAD)>之间的提交(不包括<since>)写入临时文件
3.当前分支强制重置(reset --hard)到<newbase>
4.将临时文件中的提交逐一顺序提交到<newbase>
5.遇到已存在的提交则跳过,遇到冲突则暂停。手动解决冲突后,用git rebase --continue继续,
也可以不解决冲突直接git rebase --skip跳过或者git rebase --abort终止本次rebase操作。
执行完rebase命令后重复13.1.3重置版本树即可。

13.2.2 交互模式

git rebase -i <newbase>

13.3 重置本次操作

git reset --hard 原始版本最后一次提交ID

14.其他命令

查看所有引用

git show-ref
从某个提交新建一个版本树(丢掉以前记录)
echo “提交注释” | git commit-tree 提交ID或者标签^{tree}
git rebase --onto 前1条命令返回的提交ID 提交ID或者标签 当前分支名称
回退某个提交
git revert 提交ID或者标签
清除工作区中的untracked文件
git clean -fd

 

打包

git archive -o xxx.zip 提交ID或者标签
git archive -o xxx.tar 提交ID或者标签
git archive -o xxx.tar.gz 提交ID或者标签
更改远程数据源地址
git remote set-url origin <URL>
显示远程数据源地址
git remote show origin
忽略文件
添加忽略文件名到.git/info/exclude

转载于:https://www.cnblogs.com/EmbeddedLiving/p/3446829.html

你可能感兴趣的文章
我的友情链接
查看>>
centos搭建supervisor
查看>>
linux日志分割
查看>>
Samba再报安全漏洞
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Spring学习资料之 依赖注入(一)
查看>>
linux下mysql配置文件my.cnf详解
查看>>
安装win7提示安装程序无法创建新的系统分区和定位现有系统分区
查看>>
mysql5.6配置文件详解(二)
查看>>
深度学习研究组
查看>>
博客第一天--激激动
查看>>
面向对象(一)之类和对象
查看>>
ubuntu下文件拷贝命令cp命令
查看>>
SQL 学习日志02
查看>>
我的友情链接
查看>>
shell备份MySQL数据库
查看>>
Java中匿名内部类的作用
查看>>
我的友情链接
查看>>
全局编录的角色(GC)
查看>>