Git Commands

1. 系统设置

通常情况下,我们只需简单设置用户信息和着色即可。

$ git config --global user.name "Q.yuhen"
$ git config --global user.email qyuhen@abc.com
$ git config --global color.ui true 


可以使用 "--list" 查看当前设置。

$ git config --list


2. 初始化

创建项目目录,然后执行 "git init" 初始化。这会在项目目录创建 ".git" 目录,即为元数据信息所在。

$ git init


通常我们还需要创建一个忽略配置文件 ".gitignore",并不是什么都需要加到代码仓库中的。

$ cat > .gitignore << end

> *.[oa]
> *.so
> *~
> !a.so
> test
> tmp/

> end


如果作为 Server 存在,那么可以忽略工作目录,以纯代码仓库形式存在。

$ git --bare init


在客户端,我们可以调用 "clone" 命令克隆整个项目。支持 SSH / HTTP/ GIT 等协议。

$ git clone ssh://user@server:3387/git/myproj
$ git clone git://github.com/schacon/grit.git mygrit


3. 基本操作

Git 分为 "工作目录"、"暂存区"、"代码仓库" 三个部分。

(1) 添加

文件通过 "git add <file>" 被添加到暂存区,如此暂存区将拥有一份文件快照。

$ git add .
$ git add file1 file2
$ git add *.c


"git add" 除了添加新文件到暂存区进行跟踪外,还可以刷新已被跟踪文件的快照。需要注意的是,被提交到代码仓库的是暂存区的快照,而不是工作目录中的文件。

(2) 提交

"git commit -m <message>" 命令将暂存区的快照提交到代码仓库。

$ git commit -m "message"


在执行 commit 提交时,我们通常会直接使用 "-a" 参数。该参数的含义是:刷新暂存区快照,提交时同时移除被删除的文件。但该参数并不会添加未被跟踪的新文件,依然需要执行 "git add <file>" 操作。

$ git commit -am "message"


(3) 状态

可以使用 "git status" 查看暂存区状态,通常包括 "当前工作分支(Branch)"、"被修改的已跟踪文件(Changed but not updated)",以及 "未跟踪的新文件(Untracked files)" 三部分信息。

$ git status

# 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:   readme
#

# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       install
no changes added to commit (use "git add" and/or "git commit -a")


(4) 比较

要比较三个区域的文件差别,需要使用 "git diff" 命令。

使用 "git diff [file]" 查看工作目录和暂存区的差异。
使用 "git diff --staged [file]" 或 "git diff --cached [file]" 查看暂存区和代码仓库的差异。

$ git diff readme

diff --git a/readme b/readme
index e69de29..df8285e 100644
--- a/readme
+++ b/readme
@@ -0,0 +1,2 @@
+1111111111111111111
+


(5) 撤销

作为代码管理工作,我们随时可以 "反悔"。

使用 "git reset HEAD <filename>" 命令可以取消暂存区的文件快照(即恢复成最后一个提交版本),这不会影响工作目录的文件修改。
使用 "git checkout -- <filename>" 可以使用暂存区快照恢复工作目录文件,工作目录的文件修改被抛弃。

$ git chekcout -- readme


在 Git 中 "HEAD" 表示仓库中最后一个提交版本,"HEAD^" 是倒数第二个版本,"HEAD~2" 则是更老的版本。

我们可以直接 "签出" 代码仓库中的某个文件版本到工作目录,该操作同时会取消暂存区快照。

$ git checkout HEAD^ readme


如果想将整个项目回溯到以前的某个版本,可以使用 "git reset"。可以选择的参数包括默认的 "--mixed" 和 "--hard",前者不会取消工作目录的修改,而后者则放弃全部的修改。该操作会丢失其后的日志。

$ git reset --hard HEAD^


(6) 日志

每次提交都会为整个项目创建一个版本,我们可以通过日志来查看相关信息。

参数 "git log -p" 可以查看详细信息,包括修改的内容。
参数 "git log -2" 查看最后两条日志。
参数 "git log --stat" 可以查看统计摘要。

$ git log --stat -2 -p

commit c11364da1bde38f55000bc6dea9c1dda426c00f9
Author: Q.yuhen <qyuhen@hotmail.com>
Date:   Sun Jul 18 15:53:55 2010 +0800

    b
---
 0 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/install b/install
new file mode 100644
index 0000000..e69de29

commit 784b289acc8dccd1d2d9742d17f586ccaa56a3f0
Author: Q.yuhen <qyuhen@hotmail.com>
Date:   Sun Jul 18 15:33:24 2010 +0800

    a
---
 0 files changed, 0 insertions(+), 0 deletions(-)

diff --git a/readme b/readme
new file mode 100644
index 0000000..e69de29


(7) 重做

马有失蹄,使用 "git commit --amend" 可以重做最后一次提交。

$ git commit --amend -am "b2"

[master 6abac48] b2
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 abc
 create mode 100644 install

$ git log

commit 6abac48c014598890c6c4f47b4138f6be020e403
Author: Q.yuhen <qyuhen@hotmail.com>
Date:   Sun Jul 18 15:53:55 2010 +0800

    b2

commit 784b289acc8dccd1d2d9742d17f586ccaa56a3f0
Author: Q.yuhen <qyuhen@hotmail.com>
Date:   Sun Jul 18 15:33:24 2010 +0800

    a


(8) 查看

使用 "git show" 可以查看日志中文件的变更信息,默认显示最后一个版本(HEAD)。

$ git show readme 
$ git show HEAD^ readme


(9) 标签

可以使用标签(tag)对最后提交的版本做标记,如此可以方便记忆和操作,这通常也是一个里程碑的标志。

$ git tag v0.9

$ git tag
v0.9

$ git show v0.9
commit 3fcdd49fc0f0a45cd283a86bc743b4e5a1dfdf5d
Author: Q.yuhen <qyuhen@hotmail.com>
Date:   Sun Jul 18 14:53:55 2010 +0800
...


可以直接用标签号代替日志版本号进行操作。

$ git log v0.9

commit 3fcdd49fc0f0a45cd283a86bc743b4e5a1dfdf5d
Author: Q.yuhen <qyuhen@hotmail.com>
Date:   Sun Jul 18 14:53:55 2010 +0800

    a


4. 工作分支

用 Git 一定得习惯用分支进行工作。

使用 "git branch <name>" 创建分支,还可以创建不以当前版本为起点的分支 "git branch <name> HEAD^"。
使用 "git checkout <name>" 切换分支。

$ git branch yuhen

$ git checkout yuhen
Switched to branch 'yuhen'

$ git branch
  master
* yuhen


使用 "git chekcout -b <name>" 一次完成分支创建和切换操作。

$ git checkout -b yuhen
Switched to a new branch 'yuhen'

$ git branch
  master
* yuhen


在分支中完成提交,然后切换回主分支进行合并(git merge)和删除(git branch -d <name>)操作。

$ git checkout master
Switched to branch 'master'

$ git merge yuhen
Updating 6abac48..7943312
Fast-forward
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 abc.txt

$ git branch -d yuhen
Deleted branch yuhen (was 7943312).

$ git branch
* master


附注: 如果当前工作目录有未提交的内容,直接切换到其他分支会将变更一同带入。

5. 服务器

(1) 首先克隆服务器代码仓库。

$ git clone git@192.168.1.202:/git.server/project1 # SSH


完成克隆后,可以用 origin 来代替服务器地址。使用 "git remote" 命令查看相关信息。

$ git remote
origin

$ git remote show origin
* remote origin
  Fetch URL: ...
  Push  URL: ...
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)


还可以创建新的 remote 设置。

$ git remote add project1 git@192.168.1.202:/git.server/project1

$ git remote
origin
project1

$ git remote rm project1


(2) 在将代码提交(push)到服务器之前,首先要确认相关更新已经合并(merge)到主分支(master)。还应该先从服务器刷新(pull)最新代码,以确保自己的提交不会和别人最新提交的代码冲突。

$ git pull origin master
$ git push origin master


(3) 要提交标签到服务器,需要额外操作 (先执行 git push 提交,然后再执行该指令)。

$ git push origin --tags


6. 管理

检查损坏情况。

$ git fsck


清理无用数据。

$ git gc


----------- 分隔线 -----------

整理一下各种常用的命令,便于翻阅。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值