Pro GIt 阅读笔记
跟着Pro Git重新学一遍Git
¶
创建仓库¶
自己创建¶
cd /path/to/repo
git init
clone
¶
git clone [url]
[url]
选项:
- 本地文件/网络存储:
/srv/repo
HTTP
:分为 smart HTTP 和SSH
:推荐,配置简单,但只有鉴权用户才能使用GIT
:没有鉴权机制,监听端口,只推荐公开访问
git clone https://github.com/git/git git-fork # 重命名
添加文件¶
git add -- [file]
查看¶
stage 详情¶
git status
git status -s # shorter
修改情况¶
git diff
git diff --staged
git diff
本身diff
的是staged
和unstaged
的文件,不会涉及上次提交的文件;git diff --cached
(或者同义词--staged
)
或者可以通过设置git difftool
使用外部工具进行diff
。
提交修改¶
git commit
git commit -v # 详细的diff信息
git commit -a # commit前自动stage所有tracked文件
删除文件¶
使用rm
和git add
¶
rm README.md
git add README.md
使用git rm
¶
git rm README.md # 硬删除
git rm --staged README.md
通配符¶
git rm log/\*.log # 删除log/文件夹下所有后缀名为.log的文件
移动文件¶
git mv file_from file_to
值得注意的是,git
里并没有mv
这个状态,而是rename
。这是通过git
的文件跟踪机制实现的。
查看commit
历史¶
git log
git log -p -2 # -p --patch 显示每次的patch; -2 显示最近两条
git log --stat # 查看简单的统计信息
git log pretty=oneline # --oneline
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
后悔药¶
git commit --amend
git reset HEAD CONTRIBUTING.md # 把CONTRIBUTION.md文件拉回HEAD提交的样子
git checkout -- <file> # 很危险,会丢失当前修改
git restore --staged <file> # 用于不小心多stage了一个文件的情况,unstage文件但不丢失修改
git restore <file> # Restore a modified file
分支¶
每一个git object
中,除了文件的snapshot
之外还会有指向父commit
的指针,可能有零个(root commit
)、一个、两个及以上(merge commit
),指针情况可以通过git log --oneline --decorate
查看。
git log --oneline --decorate --graph --all
创建分支¶
git branch new_branch
切换分支¶
git checkout new_branch
注意¶
在git 2.23
之后,可以使用git switch
来:
- 切换到已存在分支:
git switch test-branch
- 创建分支并切换:
git switch -c new-branch
(或--create
) - 切回上一个分支:
git switch -
Merge¶
Fast-forward¶
在两个分支的tag
在同一主线上时
Merge¶
利用两个commit
的内容和公共祖先来合并分支