Git命令行教程

来源:互联网 发布:网络大学招生 编辑:程序博客网 时间:2024/05/16 19:04

1. 概述

1.1. 工作区、暂存区、版本库

工作区、暂存区、版本库
工作区:工作目录。
暂存区:英文叫stage, 或index。一般存放在”git目录”下的index文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
版本库:工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。

1.2. Git存储原理

在Git中,所有用来表示项目历史信息的文件,是通过一个40个字符的(40-digit)“对象名”来索引的,对象名看起来像这样:6ff87c4664981e4397625791c8ea3bbb5f2279a3。
对象:每个对象(object) 包括三个部分:类型,大小和内容。有四种类型的对象:blob、tree、commit 和tag。
blob:用来存储文件数据,通常是一个文件。文件用gzip压缩。
tree:类似于目录的概念。
commit:指向一个tree和一些commit信息。
tag:标记某一个commit。
目录结构
│ COMMIT_EDITMSG //commit 最近一次编辑信息
│ config
│ description
│ HEAD //里面保存了最近一次commit对象的哈希值,实际内容是refs/heads/master
│ index //缓存区
│ ORIG_HEAD
│ packed-refs
├─hooks
├─info
├─logs
├─objects //存储四种类型的对象,文件夹名是对象的前两位哈希值,文件名是后38位。
└─refs
├─heads
└─tags
存储过程
git add:生成blob对象(如果是删除操作,不会马上删除对象)。
git commit:生成commit对象,并且修改HEAD中的值。
git reset:修改HEAD中的值。
命令:可以使用以下命令查看存储结构信息。
$ git hash-object file:查看文件的哈希值。
$ git cat-file –p hash:通过哈希值查看对象的内容。
$ git cat-file –t hash:通过哈希值查看对象类型。

2. 安装与初始配置

2.1. win安装

从 https://git-scm.com/download/win 获取Git,安装会自动配置系统环境变量。

2.2. mac安装

在 Mac 平台上安装 Git 最容易的当属使用图形化的 Git 安装工具,下载地址为:
http://sourceforge.net/projects/git-osx-installer/

2.3. 配置

打开Git目录下的git-bash.exe(建议所有操作都通过这个进行而不是cmd)。
输入以下命令配置用户信息:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

3. 基本操作

3.1. 开始

切换到工作目录(所有的操作都应切换到工作目录中进行):
$ cd path
例如:
$ cd /e/phpworkshop
如果是cmd,如果工作目录在其他磁盘,如E:\phpworkshop,按以下操作:
> E:\
E:\> cd phpworkshop\
初始化Git:
$ git init
使用该命令后,会在工作目录中生成.git文件夹。

3.2. 提交

将修改添加到缓存区:
$ git add file
使用以下命令可以添加所有的文件
$ git add .
提交修改:
$ git commit
输入该命令后会打开vim编辑器编辑提交信息。(vim编辑器的简单使用如下:输入i进行编辑模式,输入文本;按esc,输入‘:wq’保存退出)
或者使用以下命令进行提交并输入提交信息:
$ git commit –m ‘do some thing’
$ git commit –a
使用该命令可以自动添加到缓存区($ git add),注意新文件的第一次的修改添加是必须的,第一次修改添加会跟踪新文件。

3.3. 版本回退

$ git reset <commithash>
回退到某个commit的版本,并且会删除回退版本后的新的版本。如果要获取commit的哈希值,请使用以下命令:
$ git log --oneline
也可以用HEAD来代替上面的参数,HEAD表示当前版本,HEAD^表示上一个版本,HEAD~n表示前n个版本。
注意版本回退不会改变目前工作区的文件,如果要得到版本库的文件请使用以下命令更新文件:
$ git checkout -- file
或者直接使用以下命令进行回退:
$ git reset --hard <commithash>
这个命令会自动更新工作目录与回退版本一致。

3.4. 查看

查看仓库状态:
$ git status
该命令可以查看什么文件被修改过。
查看不同:
$ git diff file
可以得到diff信息,例如:

diff –Git a/f1 b/f1     //a版本的f1(变动前) 与 b版本的f1(变动后) 比较index 6f8a38c..449b072 100644    //a版本的在index的对象的哈希值 b版本在工作区的对象的哈希值 文件信息(644表示权限)- a/f1     //变动前的文件+++ b/f1     //变动后的文件@@ -1,7 +1,7 @@    //变动前的文件从第一行开始的7行 与 变动后的文件第一行开始的7行存在不同//以下是比较信息 一行前面有- + !或者没有标志,分别表示删、增、改、没有修改。  

查看当前版本与某个版本的不同:
$ git diff <commithash>

3.5. 删除与恢复

删除:
$ git rm file
该命令会删除版本库里面的文件。
恢复:
如果在工作区中不小心误删了或者修改错了文件,可以通过以下命令恢复:
$ git checkout –- file
该命令的意思是将版本库中file文件复制到工作区中。

3.6. 暂存与恢复

如果临时需要到其他分支进行工作而当前分支工作未完成可以使用暂存命令:
$ git stash
该命令会当前工作现场“储藏”起来,等以后恢复现场后继续工作。
此后可以checkout到其他分支进行工作。
使用以下命令进行恢复:
$ git stash pop
该命令会恢复最近一次的暂存。也可以使用以下命令组恢复其他暂存:
$ git stash list :查看暂存信息
$ git stash apply <stashhash>:恢复某暂存
$ git stash drop <stashhash>:删除某暂存

4. 远程仓库

4.1. 添加远程仓库

在gitoschina、github中添加一个远程仓库,然后可以使用以下命令添加到本地
$ git remote add origin url
使用该命令后会在本地建立一个叫做origin的仓库,这个仓库指向远程仓库。
可以通过以下命令查看远程仓库
$ git remote

4.2. 删除远程仓库

$ git remote rm origin
可以删除在本地建立的远程库。

4.3. ssh安全连接

在本地用户目录中如果不存在.ssh目录请打开git_bash.exe按照以下命令添加ssh秘钥。
$ ssh-keygen -t rsa -C "youremail@example.com"
将生成的.ssh文件夹下面的id_rsa.pub文件中的内容添加到gitoschina、github等的ssh秘钥库中。这样就可以使用ssh协议连接了。

4.4. push到远程库

如果远程库的分支与本地的分支有关联(up-stream/track),可以使用以下命令:
$ git push
直接将本地的版本master推送到orgin/master版本。
如果没有关联则应该使用以下命令
$ git push origin <localbranch>:<remotebranch>
例如:
$ git push origin master:master
将本地的master分支推送到origin/master分支。
将分支关联的方法如下:
$ git branch –-set-upstream-to=origin/<remotebranch> <localbranch>
例如:
$ git branch –-set-upstream-to=origin/master
表示把远程仓库origin分支与本地的master分支关联,缺省默认表示当前分值。
如果没有获取远程分支时,该命令会报没有找到分支的错误,请先使用:
$ git fetch origin
获取远程分支。
关联后pull、push操作等都可以简化。

4.5. 从远程库pull

Pull操作会从远程仓库提取数据并尝试合并到当前分支。如果分支关联,可以使用以下命令:
$ git pull
如何进行关联请参考4.4。
如果没有关联请使用以下命令:
$ git pull origin <remotebranch>:<localbranch>
注意参数顺序和push的差别。

4.6. 从远程库fetch

Fetch操作会从远程仓库下载新分支与数据。
$ git fetch <repository>
例如:
$ git fetch origin
4.7. 从远程库clone
$ git clone url
会在当前目录下新建一个与远程库名字相同的目录,并将远程库的所有文件复制到该目录下。自动建立与远程库的分支的关联。

5. 分支管理

5.1. 添加分支

$ git branch <newbranch>
以上命令可以添加分支。注意,第一次使用git的时候,应该commit一次后才能添加分支,否则会报错。

5.2. 删除分支

$ git branch –d <branch>

5.3. 切换分支

$ git checkout <branch>
以上命令会切换分支,并且替换工作区的文件。
$ git checkout –b <newbranch>
可以创建并切换到新分支。

5.4. 合并分支

$ git merge <branch>
将当前分支与分支合并。
合并的时候会进行一次commit,如果不进行commit可以使用以下命令:
$ git merge –-no--ff <branch>
在合并过程中有可能产生冲突,如果要完成合并,必须先解决冲突。解决完冲突后,进行commit,告知冲突解决完毕。

5.5. Rebase

$ git rebase <rebasebranch> <branch>
如果缺省,默认为当前分支。
假设当前分支为‘topic’,

      A---B---C topic     /D---E---F---G master  

使用以下任意一个命令:
$ git rebase master
$ git rebase master topic
结构变成:

              A'--B'--C' topic             /D---E---F---G master  

5.6. 查看分支

查看本地分支:
$ git branch
查看远程分支:
$ git branch –-remotes
查看所有分支:
$ git branch –a

6. 标签

标签可以用来标识版本信息,如v1.0。它指向一次commit。

6.1. 创建标签

$ git tag <commithash> <tag>
可以通过查看log,获取commit的哈希值:
$ git log --oneline
- -oneline参数表示显示commit的简短信息,如果需要详细信息则不用这个参数。

6.2. 查看标签

$ git tag
可以查看有什么标签,注意tag的顺序是按字母顺序。
$ git show <tag>
以上命令可以显示某个标签的详细信息。

6.3. 删除标签

$ git tag –d <tag>
如果要删除远程库的tag,请继续使用以下命令:
$ git push origin :/refs/tag/<tag>

7. 查看日志和工具

7.1. 查看日志

$ git log
注意要退出log,输入q即可。
$ git log --graph --oneline
该命令可以图形化显示。
$ git reflog
该命令显示最近几次commit。

7.2. Gitk

$ gitk
该工具集成log、diff功能一起,当解决大量冲突时应该使用该工具。

7.3. Gui

$ git gui
该工具可以实现push、pull等大部分git的功能。

原创粉丝点击