Git:参考手册
This commit is contained in:
parent
399f2338f7
commit
11b6af914c
@ -10,3 +10,295 @@ sidebar_position: 5
|
||||
author: 7Wate
|
||||
date: 2022-09-13
|
||||
---
|
||||
|
||||
## 创建与克隆
|
||||
|
||||
首先得有一个 Git 仓库才能用它进行操作,仓库是 Git 存放你要保存的快照的数据的地方。拥有一个 Git 仓库的途径有两种:
|
||||
|
||||
- 初始化一个新的 Git 仓库。
|
||||
- 克隆一个存在的项目。
|
||||
|
||||
### git init
|
||||
|
||||
在命令行当前目录中执行 git init,就可以将当前目录初始化为 Git 仓库。
|
||||
|
||||
```shell
|
||||
~/gitStudy# ls -l
|
||||
total 0
|
||||
~/gitStudy# git init
|
||||
Initialized empty Git repository in /root/gitStudy/.git/
|
||||
# 在 /root/gitStudy/.git/ 目录初始化空 Git 仓库完毕。
|
||||
~/gitStudy# ls -a
|
||||
. .. .git
|
||||
~/gitStudy#
|
||||
```
|
||||
|
||||
### git clone
|
||||
|
||||
如果需要克隆一个存在的项目。 在命令行当前目录中执行 git clone [url],url 为项目地址,然后就可以了。
|
||||
|
||||
```shell
|
||||
$ git clone git://github.com/schacon/simplegit.git
|
||||
Initialized empty Git repository in /private/tmp/simplegit/.git/
|
||||
remote: Counting objects: 100, done.
|
||||
remote: Compressing objects: 100% (86/86), done.
|
||||
remote: Total 100 (delta 35), reused 0 (delta 0)
|
||||
Receiving objects: 100% (100/100), 9.51 KiB, done.
|
||||
Resolving deltas: 100% (35/35), done.
|
||||
$ cd simplegit/
|
||||
$ ls
|
||||
README Rakefile lib
|
||||
```
|
||||
|
||||
## 基本的快照
|
||||
|
||||
Git 的工作就是创建和保存项目的快照,及与之后的快照进行对比。
|
||||
|
||||
简而言之,使用 git add 添加需要追踪的新文件和待提交的更改, 然后使用 git status 和 git diff 查看有何改动, 最后用 git commit 将你的快照记录。绝大部分时候的基本流程都是这样的。
|
||||
|
||||
### git add
|
||||
|
||||
在 Git 中提交修改文件之前,需要将它们添加到缓存。
|
||||
|
||||
```shell
|
||||
# 添加 helloworld.cpp 至缓存区
|
||||
$ git add helloworld.cpp
|
||||
# 添加当前目录至缓存区
|
||||
$ git add .
|
||||
```
|
||||
|
||||
### git status
|
||||
|
||||
在 Git 中执行 git status 命令,查看代码在缓存与当前工作目录的状态。
|
||||
|
||||
```shell
|
||||
# 简短输出
|
||||
$ git status -s
|
||||
# 详细输出
|
||||
$ git status
|
||||
```
|
||||
|
||||
### git diff
|
||||
|
||||
在 Git 中使用 git diff 描述已临时提交的或者已修改但尚未提交的改动。
|
||||
|
||||
```shell
|
||||
# 尚未缓存的改动
|
||||
$ git diff
|
||||
# 查看已缓存的改动
|
||||
$ git diff --cached
|
||||
# 查看已缓存的与未缓存的所有改动
|
||||
$ git diff HEAD
|
||||
# 显示摘要而非整个 diff
|
||||
$ git diff --stat
|
||||
```
|
||||
|
||||
### git commit
|
||||
|
||||
在 Git 中使用 git add 将内容写入缓存,然后执行 git commit 就将它实际存储快照了。
|
||||
|
||||
```shell
|
||||
# 配置提交信息
|
||||
$ git config --global user.name 'Your Name'
|
||||
$ git config --global user.email you@somedomain.com
|
||||
# 添加至缓存
|
||||
$ git add hello.rb
|
||||
# 输出状态摘要
|
||||
$ git status -s
|
||||
M hello.rb
|
||||
# 提交快照
|
||||
$ git commit -m 'my hola mundo changes'
|
||||
[master 68aa034] my hola mundo changes
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
```
|
||||
|
||||
如果执行 git commit 不适用 -m 选项,Git 则会尝试打开一个编辑器以填写提交信息。如果认为使用 git add 提交的流程太过繁琐,Git 允许使用 -a 选项跳过这一步。
|
||||
|
||||
```shell
|
||||
$ vim hello.rb
|
||||
$ git status -s
|
||||
M hello.rb
|
||||
$ git commit -m 'changes to hello file'
|
||||
# On branch master
|
||||
# Changed but not updated:
|
||||
# (use "git add <file>..." to update what will be committed)
|
||||
# (use "git checkout -- <file>..." to discard changes in working directory)
|
||||
#
|
||||
# modified: hello.rb
|
||||
#
|
||||
no changes added to commit (use "git add" and/or "git commit -a")
|
||||
$ git commit -am 'changes to hello file'
|
||||
[master 78b2670] changes to hello file
|
||||
1 files changed, 2 insertions(+), 1 deletions(-)
|
||||
```
|
||||
|
||||
### git reset HEAD
|
||||
|
||||
git reset 命令用于回退版本,可以指定退回某一次提交的版本。
|
||||
|
||||
```shell
|
||||
git reset HEAD^
|
||||
```
|
||||
|
||||
### git rm
|
||||
|
||||
通过执行 git rm 来删除 Git 追踪的文件,它还会删除你的工作目录中的相应文件。
|
||||
|
||||
## 分支与合并
|
||||
|
||||
几乎每一种版本控制系统都以某种形式支持分支,一个分支代表一条独立的开发线。使用分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。Git 的分支模型称为**必杀技特性**,而正是因为它,将 Git 从版本控制系统家族里区分出来。
|
||||
|
||||
### git branch
|
||||
|
||||
在 Git 中列出、创建与管理工作上下文。
|
||||
|
||||
```shell
|
||||
# 列出可用的分支
|
||||
$ git branch
|
||||
# 创建新分支
|
||||
$ git branch (branchname)
|
||||
# 删除分支
|
||||
$ git branch -d (branchname)
|
||||
```
|
||||
|
||||
### git switch
|
||||
|
||||
在 Git 中切换至指定分支。
|
||||
|
||||
```shell
|
||||
git switch master
|
||||
```
|
||||
|
||||
### git checkout
|
||||
|
||||
在 Git 中 git checkout 创建新分支,并立即切换到它
|
||||
|
||||
```shell
|
||||
git checkout -b (branchname)
|
||||
```
|
||||
|
||||
### git merge
|
||||
|
||||
一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支。 你可以使用 `git merge` 命令将任何分支合并到当前分支中去。
|
||||
|
||||
```shell
|
||||
$ git branch
|
||||
* master
|
||||
removals
|
||||
$ ls
|
||||
README hello.rb more.txt test.txt
|
||||
$ git merge removals
|
||||
Updating 8bd6d8b..8f7c949
|
||||
Fast-forward
|
||||
more.txt | 1 -
|
||||
test.txt | 1 -
|
||||
2 files changed, 0 insertions(+), 2 deletions(-)
|
||||
delete mode 100644 more.txt
|
||||
delete mode 100644 test.txt
|
||||
$ ls
|
||||
README hello.rb
|
||||
```
|
||||
|
||||
### git log
|
||||
|
||||
在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用 git log 命令查看。
|
||||
|
||||
```shell
|
||||
$ git log
|
||||
commit 8d585ea6faf99facd39b55d6f6a3b3f481ad0d3d
|
||||
Merge: 3cbb6aa 3ac015d
|
||||
Author: Scott Chacon <schacon@gmail.com>
|
||||
Date: Fri Jun 4 12:59:47 2010 +0200
|
||||
|
||||
Merge branch 'fix_readme'
|
||||
|
||||
Conflicts:
|
||||
README
|
||||
|
||||
commit 3cbb6aae5c0cbd711c098e113ae436801371c95e
|
||||
Author: Scott Chacon <schacon@gmail.com>
|
||||
Date: Fri Jun 4 12:58:53 2010 +0200
|
||||
|
||||
fixed readme title differently
|
||||
|
||||
...
|
||||
```
|
||||
|
||||
### git tag
|
||||
|
||||
如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 `git tag` 给它打上标签。
|
||||
|
||||
```shell
|
||||
$ git tag -a v1.0
|
||||
# 指定提交打标签
|
||||
$ git tag -a v0.9 558151a
|
||||
# 指定标签信息命令
|
||||
$ git tag -a <tagname> -m "runoob.com标签"
|
||||
# PGP签名标签命令
|
||||
$ git tag -s <tagname> -m "runoob.com标签"
|
||||
```
|
||||
|
||||
## 共享与更新
|
||||
|
||||
Git 并不像 Subversion 那样有个中心服务器。 目前为止所有的命令都是本地执行的,更新的知识本地的数据库。简而言之使用 git fetch 更新你的项目,使用 git push 分享你的改动。 你可以用 git remote 管理你的远程仓库。
|
||||
|
||||
### git remote
|
||||
|
||||
在 Git 中 git remote 命令管理远端仓库列表。
|
||||
|
||||
```shell
|
||||
# 列出远端别名
|
||||
$ git remote
|
||||
# 为项目添加一个新的远端仓库
|
||||
$ git remote add <remote-name>
|
||||
# 删除现存的某个别名
|
||||
$ git remote rm <remote-name>
|
||||
```
|
||||
|
||||
### git fetch
|
||||
|
||||
在 Git 中 git fetch 从远端仓库**下载新分支与数据**。
|
||||
|
||||
```shell
|
||||
git fetch <remote-name>
|
||||
```
|
||||
|
||||
### git pull
|
||||
|
||||
在 Git 中 git pull 从远端仓库提取数据并**尝试合并到当前分支**。该命令就是在 git fetch 之后紧接着 git merge 远端分支到你所在的任意分支。
|
||||
|
||||
```shell
|
||||
git fetch <remote-name>
|
||||
```
|
||||
|
||||
### git push
|
||||
|
||||
在 Git 中 git push remote-name branch-name 将本地改动推送到远端仓库。 如果可以的话,它会依据你的 branch 的样子,推送到远端的 branch 去。
|
||||
|
||||
```shell
|
||||
git push github master
|
||||
```
|
||||
|
||||
## 检查与比较
|
||||
|
||||
### git log
|
||||
|
||||
在 Git 中执行 git log 找到你的项目历史中的特定提交 —— 按作者、日期、内容或者历史记录。
|
||||
|
||||
```shell
|
||||
# 特定作者 Linus 的提交
|
||||
$ git log --author=Linus
|
||||
# 指定日期的提交
|
||||
$ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges
|
||||
# 根据提交注释过滤提交记录
|
||||
$ git log --grep=P4EDITOR --no-merges
|
||||
```
|
||||
|
||||
### git diff
|
||||
|
||||
在 Git 中执行 git diff 比较历史记录中的两个不同的点 —— 通常是为了看看两个分支有啥区别,或者从某个版本到另一个版本,你的软件都有啥变化。
|
||||
|
||||
```shell
|
||||
# 查看 v0.9 标签后差异
|
||||
$ git diff v0.9
|
||||
```
|
||||
|
Loading…
Reference in New Issue
Block a user