zoukankan      html  css  js  c++  java
  • Git学习笔记

    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



  • 相关阅读:
    适用于小白的 python 快速入门教程
    Centos7.x & RedHat7.x系统忘记 root 密码解决办法
    让我来教你如何免费使用RHEL小红帽系统
    10#Windows注册表的那些事儿
    9#搭建网站
    8#继承和多态
    7#Java基本语句语法
    6#day2总结
    5#关于数据数值的转换
    .NET Core开发日志——配置
  • 原文地址:https://www.cnblogs.com/EmbeddedLiving/p/3446829.html
Copyright © 2011-2022 走看看