这里介绍几个查看版本库的发展变化以及比较差异的命令:
Git show-branch
- -- 查看版本库中每个分支的世系发展,并查看提交的内容是否进入分支
- --git show-branch
- --git show-branch –r
- --git show-branch --current
- -----------------------------------------------------------------------------
- ! [issue] fixed a branch ! [iisue]
* [master] mmmm-master
! [mumoe] you are hero
! [pub] you are hero
! [sos] 123456-sos - -----------------------------------------------------------------------------
- ! [issue] fixed a branch ! [iisue]
- -----------------------------------------------------------------------------
Git diff
- -- 比较两个版本差异
- --git diff 比较当前的工作目录和版本库数据库中的差异
- --git diff master sos 两个分支比较
- 差异将以典型的 patch 方式表示出来;
diff --git a/hello b/hello index a5c1966..bd9212c 100644 --- a/hello +++ b/hello @@ -1 +1,2 @@ Hello, world +It's a new day for git
Git whatchanged
- -- 查看某个版本的发展
- 我们现在再用 git-whatchanged 命令来看看 master 分支是怎么发展的。
- $ git-checkout master
- $ git-whatchanged
Git merge
- --合并两个分支
- 我们为项目创建了不同的分支,经常要将别人的分支合并到自己分支上,现在将是是哦是sos 分支上的工作合并到master分支上.
- $ git checkout master
- $ git merge "merge work in sos" sos
- 但是,此时git会出现合并冲突提示
- …………
- 通过修改冲突文件,然后再提交。
- $ git commit –i hello.c
Git-reset
- 项目跟踪工具的一个重要任务之一,就是使我们能够随时逆转(Undo)和恢复(Redo)某一阶段的工作。
- git-reset 命令就是为这样的任务准备的。它将当前的工作分支的 头 定位到以前提交的任何版本中,它有三个重置的算法选项。
- --mixed
- 仅是重置索引的位置,而不改变你的工作树中的任何东西(即,文件中的所有变化都会被保留,也不标记他们为待提交状态),并且提示什么内容还没有被更新了。这个是默认的选项。
- --soft
- 既不触动索引的位置,也不改变工作树中的任何内容,我们只是要求这些内容成为一份好的内容(之后才成为真正的提交内容)。这个选项使你可以将已经提交的东西重新逆转至“已更新但未提交(Updated but not Check in)”的状态。就像已经执行过 git-update-index 命令,但是还没有执行 git-commit 命令一样。
- --hard
- 将工作树中的内容和头索引都切换至指定的版本位置中,也就是说自 之后的所有的跟踪内容和工作树中的内容都会全部丢失。因此,这个选项要慎用,除非你已经非常确定你的确不想再看到那些东西了。
- 现在用 –soft 选项逆转刚才提交的内容
- git reset –soft HEAD^
Git tag
- -- 标定版本 包括轻标签和署名标签
- --git tag my-tag
- --git tag –s my-tag
Git fetch
- -- 抓取远程版本库的工作到一个临时的标签中,然后运行Git merge 命令
- -- git fetch
- 由不同版本库的通信协议,可以几种形式代替:
- Rsync
- rsync://remote.machine/patch/to/repo.git/
- SSH
- eten@192.168.0.11:/path/to/iii.git
- 这里的eten 是登录用户名 ;192.168.0.11 是保存版本库的主机IP地址
- local directory
- /path/to/repo.git 本地目录的情况
- git Native
- git://remote.machine/path/to/repo.git
- HTTP
- http://remote.machine/path/to/repo.git
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 如何通过 Email 来提交工作++++++++++++++++++++++++++++++++++++
背景: 如果版本库是通过单向的下载协议发布的,如 HTTP,我们就无法将工作上传到公共的版本库中。别人也无法抓取我的工作,那怎么办呢?不必担心,可以依赖emai来进行交流。
操作如下:
1. 下载版本库
- $ git clone http://www.bit.com/git/git-project.git
- $ cd git-project
- 默认地,它会有两个分支; master和origin ,直接在master下工作,也可以创建自己的工作分支,但千万不要修改origin 分支!因为它是公共版本库的镜像。
- 你可以直接在 master 下开展工作,也可以创建你自己的工作分支。当你对项目做了一定的工作,并提交到库中。我们用 git-show-branch 命令先看下库的状态。
- * [master] your buddy's contribution ! [origin] degining of git-format-patch example--* [master] your buddy's contribution*+ [origin] degining of git-format-patch example
- 上面就假设你已经提交了一个叫 "your buddy's contribution" 的工作。现在我们来看看怎么通过 email 来交流工作了。
2.
- $ git-fetch origin (1)
- $ git-rebase origin (2)
- $ git-format-patch origin (3)
- (1)更新 origin 分支,防止 origin 分支不是最新的公共版本,产生错误的补丁文件;
- (2)将你在 master 上提交的工作迁移到新的源版本库的状态的基础上;
- (3)生成补丁文件;
- 会在当前目录下生成一个大概名为 0001-your-buddy-s-contribution.txt 补丁文件