首页 > 程序开发 > 综合编程 > 其他综合 >

git 命令学习实战

2016-11-01

git checkout -b newBranch2 新建名为newBranch的分支,同时切换到该分支。图中:有C0和C1两个提交(在实际当中,C0,C1表示两个提交的hash值,一长串字符的),当前处于master分支。

git checkout -b newBranch2 //新建名为newBranch的分支,同时切换到该分支。

1、git commit

图中:有C0和C1两个提交(在实际当中,C0,C1表示两个提交的hash值,一长串字符的),当前处于master分支,

使用命令:

git commit -m "本次提交提示信息"

git commit -m "本次提交提示信息"

此时有: HEAD->master->C1

\

使用后变为:

HEAD->master->C3

\

2、git branch

下面。具体看图:

使用前:

HEAD->master->C1;

\

git branch newBranch //新建名为newBranch的分支,指向当前提交

变成:

HEAD->master->C1;

newBranch->C1;

\

git branch -a //显示所有分支,包括本地分支和远端分支

显示结果为:

\

git branch -fnewBranch HEAD^ //将分支newBranch 指向当前提交(HEAD)的上一个(^)提交。如果当前分支不存在,则创建该分支;如果分支位置未指定,则默认为指向当前分支

此时:

HEAD->newBranch->C0;

master->C1;

\

git branch -d newBranch //删除名为 newBranch的分支,当删除分支为以下情况会失败:1. 当前分支时; 2. master分支时; 3. 未知的分支时。

变成:

\

3、git merge

此时:

HEAD->master->C3;

bugFix->C2;

\

git merge bugFix //将当前分支与 bugFix 合并,重点注意:在实际操作过程中,合并时需要解决代码冲突问题。

此时:

HEAD->master->C4;

bugFix->C2;

\

4、git rebase

注意与 git merge 相比较,两者都是合并分支,merge更简单,保留所有信息;而rebase能得到更加清晰的工作流

此时:

HEAD->master->C3;

bugFix->C2;

\

git rebase bugFix //将当前分支的父提交移到bugFix分支下,得到比merge具有更加线性的提交历史

变为:

HEAD->master->C3'

bugFix->C2;

\

5、git checkout 切换分支

此时:

HEAD->master->C2;

\

git checkout C2^ //切换分支,将HEAD指向C2的父提交(^表示上一个提交)——C1 (此处C1代表这个提交的hashcode);

此时:

HEAD->C1;

master->C2;

\

git checkout -b bugFix //创建分支,并切换到该分支;

此时:

HEAD->bugFix->C1;

master->C2;

\

6、git log 显示日志

使用 git log 可以查看每一次提交的详细信息。

git log

\

7、git reset 和git revert 撤销更改

git reset 是真正的撤销,当前操作直接丢弃,而git revert 则是将你要撤销回退到的某个状态作为一个新的提交,使得新的提交与你要回退到的状态是一致的,达到撤销的效果,由于git reset只适用于本地的分支,因而:本地撤销一般使用 git reset;远程分支的撤销使用 git revert;

此时:

master->C1;

pushed->C2;//假设该分支与远端分支绑定

HEAD->local->C3;

\

git reset master //将当前分支local撤销更改回退到master状态

git checkout pushed //切换到pushed分支

git revert master //使用revert将当前远端分支pushed回退到master状态

此时有:

master->C1;

local->C1;

HEAD->pushed->C1';

\

8、git cherry-pick 转移工作区

使用该命令可以将选定的提交记录转移到当前的位置

此时: HEAD->master->C1

\

git cherry-pick C3 C4C7 //将提交 C3 C4 C7 按顺序转移到当前位置之后

\

9、git tag 和 git describe

git tag给某个提交打一个标记,一般是在一些特殊意义的提交打标记,比如标记名为版本号等。

git describe 则用来描述当前位置距离最近的一个标记点相差几个提交,输出格式为:__g

此时:

\

git tag V0 C1 //给C1打上标记V0

git tag V2 side

\

git describe //描述当前位置距离最近的标记相差几个提交

结果为:

\

C5距离最近标记V0相差3个提交: C2 C4 C5

10、git clone

在开始一个项目时,使用git clone <版本库的网址> 将远端版本库克隆到本地仓库。

在clone 之前远端仓库的样子:

\

git clone <版本库的网址> //克隆目标版本库到本地仓库

此时,本地仓库和远端仓库示例如下:

\

其中o/master为本地仓库的远端分支,与远端仓库的master分支相互映射,实际项目中,一般使用origin而不是o,名字格式为:/

注意:当前分支

11、git fetch

gitfetch 完成了两项工作:1> 下载本地仓库中未包含的提交;2>更新我们的远端分支(如origin/master)。但不会:更新你的本地分支。

\

git fetch //1> 下载本地仓库中未包含的提交;2> 更新我们的远端分支(如origin/master)

\

12、git pull

注意,此时 本地分支master 与远端分支 o/master 处于绑定状态。

如果不处于绑定状态则无法使用pull和push;因为如果没有绑定的话,不知道到底要pull哪一个分支下来,以及不知道将该分支push到哪个分支上去。

\

git pll //实现两个功能,git fetch 以及git merge;

\

等价于:

git fetch

\

+

git merge o/master

\

注意:git pull --rebase的作用等同于 git fetch + git rebase,这样能够得到更加清晰线性的工作流

13、git push

提交当前代码到远端分支;注意:master与远端分支o/master相对应;

git push 之后,完成本地与远端的同步

git push --force

强行将当前分支提交到远端分支,即使会导致远端版本回滚;如果不存在映射的远端分支,则会创建对应的远端分支。

git push origin :

将指定的本地分支 推送到指定的远端分支

相关文章
最新文章
热点推荐