Skip to content
GitLab
Menu
Why GitLab
Pricing
Contact Sales
Explore
Why GitLab
Pricing
Contact Sales
Explore
Sign in
Get free trial
Changes
Page history
新文件: unix/emacs_ui.png
authored
Jan 14, 2017
by
Chan Chung kwong
修改: unix/git.md
Show whitespace changes
Inline
Side-by-side
unix/git.md
View page @
17602c95
...
...
@@ -119,12 +119,36 @@ git commit
想知道提交,可用
`git log`
或者GUI的
`gitk`
。
## 分支
分支用于表示一个发展方向。一种常见用法是维持一个主分支,然后每开发一个特性或补丁时创建一个特性分支,在分支中进行开发,直到足够稳定时才把成果合并回主分支。Git中的分支实际上为指向提交的指针,每当提交时当前分支就指向最新的提交。由于Git中分支操作代价很低,需要时尽管用。
```
git branch
```
可以列出所有分支,并标注当前分支。
要创建分支用命令
`git branch <分支名>`
,要删除分支则用命令
`git branch -d <分支名>`
。
要切换当前分支,用
`git checkout <分支名>`
。要把一个分支的变化合并到当前分支,用
`git merge <分支名>`
。
## 标签
有时分支在个别时间点(例如发布时)上的状态特别重要,于是我们会想给它一个名字以方便引用。这时可用
`git tag -a <标签名> [-m <说明>]`
。
用
`git tag`
可列出已有标签的名字。
## 远程仓库
如果通过
`git clone`
创建仓库,则应有远程仓库origin。如果要增加远程仓库,可用
`git remote add
`
如果通过
`git clone`
创建仓库,则应有远程仓库origin。如果要增加远程仓库,可用
`git remote add
<远程仓库名字> <URL> `
。
想列出当前的远程仓库,用
`git remote -v`
。
要把远程仓库的重新拉取回来,可用
`git fetch [<远程仓库名字>]`
,用
`git pull [<远程仓库名字>]`
进一步把更新合并到当前分支。
相反要把本地更新推给远程仓库,可用
`git pull [<远程仓库名字>] [<分支>]`
。不过,你需要有写权限。
# 主要命令概述
命令|用途
...
...
@@ -181,13 +205,48 @@ git commit
`
git stash
`|记录当前工作树
`
git status [
<pathspec>
...]
`|显示工作树状态(HEAD与暂存区间变化,暂存区与工作树间变化)
`
git submodule
`|管理子模块
`
git tag [-f] [-m
<msg>
| -F
<file>
]
<tagname>
[
<commit>
|
<object>
]
`|增加标签
`
git tag
[-a]
[-f] [-m
<msg>
| -F
<file>
]
<tagname>
[
<commit>
|
<object>
]
`|增加标签
`
git tag -d
<tagname>
...
`|删除标签
`
git tag [-n[
<num>
]] -l [
<pattern>
...]
`|列出标签
`
git worktree
`|支持多工作树
`
gitk
`|图形化的Git仓库浏览器
其中各种对象可用以下方式表示:
- SHA-1值的十六进制字符串表示的前面若干个字符(不必全部40个,只要不引起歧义)
- `
git describe
`的输出
- 符号引用名字`
<refname>
`,它会依次查找:
1. `
$GIT_DIR/
<refname>
`(如`
HEAD
`、`
FETCH_HEAD
`、`
ORIG_HEAD
`、`
MERGE_HEAD
`、`
CHERRY_PICK_HEAD
`);
2. `
refs/
<refname>
`
3. `
refs/tags/
<refname>
`
4. `
refs/heads/
<refname>
`
5. `
refs/remotes/
<refname>
`
6. `
refs/remotes/
<refname>
/HEAD
`
- `
@
`相当于`
HEAD
`
- `
<refname>
@{
<date>
}
`表示提交`
<refname>
`之前某时间的提交,其中`
<date>
`形如`
yesterday
`、`
1 month 2 weeks 3 days 1 hour 1 second ago
`或`
1979-02-26 18:30:00
`
- `
<refname>
@{
<n>
}
`,表示提交`
<refname>
`之前每n个提交
- `
@{
<n>
}
`相当于`
<当前分支>
@{
<date>
}
`
- `
@{-
<n>
}
`表示此前检出的第n个提交
- `
<branchname>
@{upstream}
`表示指定分支或当前分支的上游
- `
<branchname>
@{push}
`表示指定分支或当前分支的默认推入的远程分支
- `
<rev>
^
`表示提交`
<rev>
`的第一个前驱
- `
<rev>
^{n}
`表示提交`
<rev>
`的第n个前驱
- `
<rev>
~
<n>
`表示提交`
<rev>
`的第n代祖先,每代都选首个前驱
- `
<rev>
^{
<type>
}
`表示把`
<rev>
`看作指定类型(否则不断解引用),如commit、tree、object或tag
- `
<rev>
^{}
`表示标签`
<rev>
`
- `
<rev>
^{/
<text>
}
`表示`
<rev>
`的祖先中最近提交信息有子串匹配正则表达式`
<text>
`的提交
- `
:/
<text>
`表示最近提交信息有子串匹配正则表达式`
<text>
`的提交
- `
<rev>
:
<path>
`表示指定提交中的blob对象或树对象
- `
[:
<n>
]:
<path>
`表示暂存区中的blob对象,其中在合并时n为1、2、3分别表示共同祖先、目标分支版本、被合并分支版本
而为指定提交的范围,可用以下之一:
- `
<rev>
`表示`
<rev>
`的祖先
- `
^
<rev>
`表示非`
<rev>
`的祖先
- `
<rev1>
..
<rev2>
`表示`
<rev2>
`的祖先但不是`
<rev1>
`的祖先,省略提交则视为`
HEAD
`
- `
<rev1>
...
<rev2>
`表示`
<rev1>
`或`
<rev2>
`的祖先但不是它们的共同祖先,省略提交则视为`
HEAD
`
- `
<rev>
^@
`表示`
<rev>
`的祖先但不包括`
<rev>
`
- `
<rev>
^!
`表示提交`
<rev>
`本身
其中仓库通常用URL表示,形如以下之一:
- `
ssh://[user@]host.xz[:port]/path/to/repo.git/
`
...
...
...
...