git学习之基础知识篇

最近比较完整的学习了一遍《Pro Git》这本书,书中的版本是Version 2.1.33。虽然之前了解和使用过一些git命令,但碰到一些更复杂的使用场景还是明显感觉到很茫然。这本书既讲的很深入,也很通俗易懂。下面的内容都是学习这本书的总结。

我学习时本地的git版本是windows 2.24.1。

$ git --version
git version 2.24.1.windows.2

git安装

在 Fedora 上可以使用 yum:

$ sudo yum install git

在基于 Debian 的发行版上,可以使用 apt-get

$ sudo apt-get install git

在Windows上,打开https://git-scm.com/download/win,下载安装包进行安装。

初次运行 Git 前的配置

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位

置:

1. /etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的git config 时,它会从此文件读写配置变量。

2. ~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git读写此文件。

3. 当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。

 

配置用户名称和邮件地址

$ git config --global user.name "XXXX"
$ git config --global user.email [email protected]

配置默认文本编辑器。windows上可以不用配,默认用vim编辑。

$ git config --global core.editor emacs

 

检查配置信息

$ git config --list
或者只查看global配置
$ git config --global --list

 

获取帮助

$ git help 

$ git  --help

$ man git-

基础命令

获取git仓库的2种方式

1. 在已存在目录中初始化仓库

$ git init

2. 克隆现有的仓库

$ git clone url

 

缩短状态命令的输出

$ git status -s

  M README 被修改了但是还没被放入暂存区

MM Rakefile 在工作区被修改并提交到暂存区后又在工作区中被修改了

A lib/git.rb 新添加到暂存区

M lib/simplegit.rb 新修改添加到暂存区

?? LICENSE.txt 未跟踪

 提交到本地仓库

$ git add 将修改提交到暂存区
$ git commit -m 'add file' 将暂存区的内容提交
或者
$ git commit -am 'add file' 直接提交,省去了暂存的操作

忽略文件.gitignore

文件.gitignore 的格式规范如下:

• 所有空行或者以 # 开头的行都会被 Git 忽略。

• 可以使用标准的 glob 模式匹配。

• 匹配模式可以以(/)开头防止递归。

• 匹配模式可以以(/)结尾指定目录。

• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。

比较差异

$ git diff 比较工作区与暂存区

$ git diff --staged 或 git diff --cached 比较暂存区与HEAD

$ git diff HEAD -- test1.txt 比较HEAD与工作区 test1.txt文件的差异

$ git diff --no-index -- test1.txt test2.txt 比较指定的2个文件 test1.txt和test2.txt的差异

$ git diff 5124f500 -- test1.txt 比较commit与工作区 test1.txt文件的差异

$ git diff 5124f500 64017f411 -- test1.txt 比较2个commit test1.txt文件的差异

$ git diff master 64017f411 -- test1.txt 比较2个commit test1.txt文件的差异

$ git diff master feature1 -- test.txt

删除操作

git rm 从已跟踪文件清单中移除文件,并连带从工作目录中删除指定的文件

git rm --cached README 从Git 仓库中删除(亦即从暂存区域移除),但仍然希望保留在当前工作目录中

$ git rm log/\*.log 可以使用 glob 模式

移动文件

$ git mv file_from file_to

 

查看提交历史

git log --pretty=oneline 或 git log --oneline 单行显示

git log --graph --pretty=oneline --abbrev-commit 查看分支合并图

git log -p -2 git log 选项 -p会显示每次提交所引入的差异, -2 只显示最近2次提交

git log --stat 每次提交的简略统计信息,可以使用 --stat 选项

git log --oneline --all --graph 查看多分支的情况

$ git log --no-merges issue54..origin/master 只显示所有在后面分支(origin/master)但不在前面分支( issue54)的提交列表

$ git log -p featureA..origin/featureA 与上一条命令相似,显示origin/featureA相对于featureA 的差异提交

$ git log -p HEAD^..HEAD 显示当前与上一个提交的差异提交,并展示git diff的比较信息。

撤销操作

重新提交或修改最后一次提交的信息-

$ git commit -m 'initial commit'

$ git add forgotten_file

$ git commit --amend

取消暂存的文件

git restore --staged file 撤销暂存区的修改(不会影响工作区)

git restore file 撤销工作区的修改

远程仓库的使用

$ git remote -v 查看远程仓库

$ git remote add   添加远程仓库

$ git fetch origin 拉取

$ git push origin master 推送

$ git remote show origin 查看某个远程仓库

$ git remote rename pb paul 将 远程仓库pb重命名为 paul

$ git remote rm paul 删除远程仓库

打标签

$ git tag 列出标签

$ git tag -l 'v1.8.5*' 使用特定的模式查找标签

有2种类型的标签:轻量标签(lightweight)与附注标签(annotated)

一个轻量标签很像一个不会改变的分支——它只是一个特定提交的引用。

附注标签是存储在 Git 数据库中的一个完整对象。 它们是可以被校验的;其中包含打标签者的名字、电子邮件地址、日期时间;还有一个标签信息;并且可以使用 GNU Privacy Guard (GPG)签名与验证。

$ git tag -a v1.4 -m "my version 1.4" 创建一个附注标签,运行 tag 命令时指定 -a 选项

$ git show v1.4 查看标签信息

$ git tag v1.5 创建一个轻量标签



$ git tag -a v1.2 9fceb02 在某个提交上打标签

$ git push origin v1.5 显式地推送标签到共享服务器上

$ git push origin --tags 把所有不在远程仓库服务器上的标签都推送过去



$ git tag -d v1.4-lw 删除标签

$ git push origin :refs/tags/v0.9 删除远程标签

$ git push origin :refs/tags/v1.4-lw 从任何远程仓库中移除这个标签



$ git checkout 2.0.0 查看某个标签2.0.0所指向的文件版本(会使你的仓库处于“分离头指针(detacthed HEAD)”状态)

$ git checkout -b version2 v2.0.0 基于标签v2.0.0创建一个新分支version2

 

Bug分支处理策略

$ git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作

$ git stash list 查看工作现场

恢复工作现场

一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;

另一种方式是用git stash pop,恢复的同时把stash内容也删了

git cherry-pick 把(可以是另一个分支)提交的bug修改“复制”到当前分支,避免重复劳动

 

为git命令创建别名

$ git config --global alias.co checkout

$ git config --global alias.br branch

$ git config --global alias.ci commit

$ git config --global alias.st status

通过修改用户家目录下的.gitconfig也可以创建别名

kuang@LAPTOP-A42TLRAL MINGW64 ~
$ cat ~/.gitconfig
...
[alias]
        dog = log --all --decorate --oneline --graph
        st = status
        ch = checkout
        ci = commit
        co = checkout
        br = branch

其他更多的操作,可以参考:

http://www.ruanyifeng.com/blog/2019/12/git-undo.html

https://www.yiibai.com/git/git_rebase.html

 

你可能感兴趣的:(git,git)