@Chiang
2019-09-30T09:31:53.000000Z
字数 3586
阅读 664
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 --listgit config user.name# 配置默认文本编辑器git config --global core.editor emacs
git help <verb>git <berb> --helpman git-<verb># config 命令手册git help config
git init
git add *.cgit 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 -sgit status -short
??新添加的未跟踪文件M右边的 M 表示该文件被修改了但是还没放入暂存区;左边的 M 表示该文件被修改了并放入了暂存区A新添加到暂存区中的文件
git diffgit diff --cachedgit 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=onelinegit log --pretty=shortgit log --pretty=fullgit log --pretty=fullergit 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_filegit 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 taggit 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.0git checkout -b version2 v2.0.0
- 如果你想查看某个标签所指向的文件版本,可以使用 git checkout 命令,虽然说这会使你的仓库处于“分离头指针(detacthed HEAD)”状态——这个状态有些不好的副作用
- 在“分离头指针”状态下,如果你做了某些更改然后提交它们,标签不会发生变化,但你的新提交将不属于任何分支,并且将无法访问,除非确切的提交哈希。因此,如果你需要进行更改——比如说你正在修复旧版本的错误——这通常需要创建一个新分支
- 当然,如果在这之后又进行了一次提交,version2 分支会因为这个改动向前移动,version2 分支就会和 v2.0.0 标签稍微有些不同,这时就应该当心了
