@Chiang
2019-09-30T17:31:53.000000Z
字数 3586
阅读 500
Git
/etc/gitconfig
~/.gitconfig
~/.config/git/config
.git/config
# 设置
git config --global user.name "John Doe"
git config --global user.email johndoe@example.com
# 查看
git config --list
git config user.name
# 配置默认文本编辑器
git config --global core.editor emacs
git help <verb>
git <berb> --help
man git-<verb>
# config 命令手册
git help config
git init
git add *.c
git add LICENSE
git commit -m 'initial project version'
git clone [url] [本地文件夹名]
git clone https://github.com/libgit2/libgit2 mylibgit
untracked
未跟踪的unmodified
未修改的staged
暂存的modified
修改的
# 查看文件状态
git status
# 状态简览
git status -s
git status -short
??
新添加的未跟踪文件M
右边的 M 表示该文件被修改了但是还没放入暂存区;左边的 M 表示该文件被修改了并放入了暂存区A
新添加到暂存区中的文件
git diff
git diff --cached
git diff --staged
- 此命令比较的是工作目录中当前文件和暂存区域快照之间的差异, 也就是修改之后还没有暂存起来的变化内容
- 若要查看已暂存的将要添加到下次提交里的内容,可以用 git diff --cached 命令。(Git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的,但更好记些。)
git log
# -p,用来显示每次提交的内容差异。 -2 来仅显示最近两次提交
git log -p -2
# 提交的简略的统计信息
git log --stat
# --pretty指定使用不同于默认格式的方式展示提交历史
git log --pretty=oneline
git log --pretty=short
git log --pretty=full
git log --pretty=fuller
git log --pretty=format:"%h - %an, %ar : %s"
# --graph 这个选项添加了一些 ASCII 字符串来形象地展示你的分支、合并历史
git log --pretty=format:"%h %s" --graph
git log --pretty=format 常用的选项
选项 | 说明 |
---|---|
%H | 提交对象(commit)的完整哈希字串 |
%h | 提交对象的简短哈希字串 |
%T | 树对象(tree)的完整哈希字串 |
%t | 树对象的简短哈希字串 |
%P | 父对象(parent)的完整哈希字串 |
%p | 父对象的简短哈希字串 |
%an | 作者(author)的名字 |
%ae | 作者的电子邮件地址 |
%ad | 作者修订日期(可以用 --date= 选项定制格式) |
%ar | 作者修订日期,按多久以前的方式显示 |
%cn | 提交者(committer)的名字 |
%ce | 提交者的电子邮件地址 |
%cd | 提交日期 |
%cr | 提交日期,按多久以前的方式显示 |
%s | 提交说明 |
选项 | 说明 |
---|---|
-p | 按补丁格式显示每个更新之间的差异 |
--stat | 显示每次更新的文件修改统计信息 |
--shortstat | 只显示 --stat 中最后的行数修改添加移除统计 |
--name-only | 仅在提交信息后显示已修改的文件清单 |
--relative-date | 使用较短的相对时间显示(比如,“2 weeks ago”) |
--graph | 显示 ASCII 图形表示的分支合并历史 |
--pretty | 使用其他格式显示历史提交信息。可用的选项包括 oneline,short,full,fuller 和 format(后跟指定格式) |
选项 | 说明 |
---|---|
-(n) | 仅显示最近的 n 条提交 |
--since,--after | 仅显示指定时间之后的提交 |
--until,--before | 仅显示指定时间之前的提交 |
--author | 仅显示指定作者相关的提交 |
--committer | 仅显示指定提交者相关的提交 |
--grep | 仅显示含指定关键字的提交 |
-S | 仅显示添加或移除了某个关键字的提交 |
# 范例
git log --pretty="%h - %s" --author=gitster --since="2008-10-01" \
--before="2008-11-01" --no-merges -- t/
# 最终你只会有一个提交——第二次提交将代替第一次提交的结果
git commit -m 'initial commit'
git add forgotten_file
git commit --amend
# 取消暂存
git reset HEAD <file>...
git reset HEAD contributing.md
# 工作区撤消之前所做的修改
git checkout -- <file>...
git checkout -- contriguting.md
# 克隆远程仓库
git clone [url] [本地文件夹名]
git clone https://github.com/libgit2/libgit2 mylibgit
# 查看远程仓库
git remote -v
# 添加远程仓库
git remote add <shortname> <url>
# 从远程仓库中抓取与拉取
# git fetch 命令会将数据拉取到你的本地仓库——它并不会自动合并或修改你当前的工作
git fetch [remote-name]
# 推送到远程分支
git push [remote-name]
git push origin master
# 查看某个远程仓库
git remote show [remote-name]
git remote show origin
# 远程仓库的移除与重命名
# 重命名
git remote rename pb paul
# 移除远程仓库
git remote rm paul
发布版本的时候挺有用的
# 列出标签
git tag
git tag -l 'v1.8.5*'
# 附注标签创建标签
git tag -a v1.4 -m 'my version 1.4'
# 查看标签信息与对应的提交信息
git show v1.4
# 轻量标签创建标签
git tag v1.4-lw
# 后期打标签
git tag -a v1.2 9fceb02
# 共享标签
git push origin [tagname]
git push origin v1.5
# 把所有不在远程仓库服务器上的标签全部传送到那里
git push origin --tags
# 删除标签
git tag -d <tagname>
git tag -d v1.4-lw
# 应该注意的是上述命令并不会从任何远程仓库中移除这个标签,你必须使用 git push <remote> :refs/tags/<tagname> 来更新你的远程仓库
git push origin :refs/tags/v1.4-lw
# 检出标签
git checkout 2.0.0
git checkout -b version2 v2.0.0
- 如果你想查看某个标签所指向的文件版本,可以使用 git checkout 命令,虽然说这会使你的仓库处于“分离头指针(detacthed HEAD)”状态——这个状态有些不好的副作用
- 在“分离头指针”状态下,如果你做了某些更改然后提交它们,标签不会发生变化,但你的新提交将不属于任何分支,并且将无法访问,除非确切的提交哈希。因此,如果你需要进行更改——比如说你正在修复旧版本的错误——这通常需要创建一个新分支
- 当然,如果在这之后又进行了一次提交,version2 分支会因为这个改动向前移动,version2 分支就会和 v2.0.0 标签稍微有些不同,这时就应该当心了