git学习(常用命令的使用)

来源:互联网 发布:sql语句建立table 主键 编辑:程序博客网 时间:2024/05/17 09:16



工作期间学习git陆陆续续近一个月,在此将一些常用的命令进行记录,共同学习。


git fetch、 git merge、 git pull、 git push、 git reset、 git log。


1、git fetch

说git fetch前先了解下FETCH_HEAD

FETCH_HEAD:是一个版本链接,记录在本地的一个文件(项目的.git)中,指向着目前已经从远程仓库取下来的分支的末端版本。

git fetch有四种基本用法:

1)、$ git fetch :--创建并更新所有远程分支的本地远程分支的最新commit-id,将其记录在 .git/FETCH_HEAD中

(如果有多个分支的话,默认使用的远程仓库查看.git/config:[branch "master"]配置)

2)、$ git fetch remote_repo :--将更新仓库名为remote_repo 的远程仓库上的所有branch的最新commit-id,将其记录

3)、$ git fetch remote_repo remote_branch_name :--将更新仓库名为remote_repo 的远程的remote_branch_name 分支

(不会创建本地没有的远程分支到本地)

4)、$ git fetch remote_repo remote_branch_name:local_branch_name :--将更新仓库名为remote_repo 的远程分支名为remote_branch_name到本地分支,本地分支名:local_branch_name

(如果本地没有local_branch_name分支,将在本地进行创建保存remote_branch_name的最新数据


2、git merge

取回远程主机的更新后,可以在它的基础上,使用git checkout命令创建一个新的分支。

$ git checkout -b newBranch origin/master

该命令表示,在取回的origin/master的基础上,创建一个新分支。


此外,可以使用git merge命令,在本地分支上合并远程分支。

$ git merge origin :在当前分支上,合并origin/master


3、git pull

git pull命令的作用是,取回远程主机的某个分支的更新,再与本地的指定分支合并。

$ git pull <远程主机名>  <远程分支名>:<本地分支名>

比如:取回origin主机的next分支,与本地的master分支合并 :$ git pull origin next:master

如果远程分支是与当前分支进行合并,则冒号后面的部分可以省略 :$ git pull origin next(省略的是本地分支名)

如果该远程分支(next)不存在,则报fatal: Couldn't find remote ref '远程分支名'(找不到该的远程分支)。


$ git pull origin next 表示,取回origin/next分支,再与当前分支合并。着等同于先做git fetch,再做git merge。

$ git fetch origin

$ git merge origin/next


在某些时候,git会自动在本地分支与远程分支之间建立一种追踪关系(tracking)。比如git clone的时候,所有本地分支默认与远程主机的同名分支建立追踪关系,也就是说,本地的master分支会自动追踪origin/master分支。


当然,git也提供了自动建立跟踪关系(下面讲解的git push同样适用)

$ git branch --set-upstream master origin/next :表示指定master分支追踪origin/next分支。

此时当前分支与远程分支存在追踪关系了,便可省略远程分支名进行pull :$ git pull origin

如果当前分支只有一个追踪分支,远程主机名也可省略 :$ git pull

(建议使用git fetch(拉取)与git merge(合并)替换git pull)


4、git push

git push命令用于将本地分支的更新推送到远程主机。格式与git pull相仿。

$ git push <远程主机名>  <本地分支名>:<远程分支名>

注意:分支推送的顺序是<来源地>:<目的地>,所以git pull的是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>


如果省略远程分支名,则表示将本地分支推送与之存在追踪关系的远程分支(通常两者同名),如果该分支不存在,则会被新建,分支名与本地相同。

$ git push origin master(省略的是远程分支名)


如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。

$ git push origin  :master

#等同于

$ git push origin --delete master

上面命令表示删除origin主机的master分支。


另:关于git push操作的默认行为

在git的全局配置中,有一个push.default属性,其决定了git push的默认行为。在Git2.0之前,这个属性默认为‘matching’,2.0后被改成‘simple’。

我们可以通过git version确定当前的git版本(如果小于2.0,更新是个更好的选择),通过git config --global push.default 'option' 改成push.default的默认行为(或者也可以直接编辑~/gitconfig文件)。

 

push.default有以下几个可选值:nothing、current、upstream、simple、matching

分别表示:

--nothing :push操作无效,除非显示指定远程分支。

--current :push当前分支到远程同名分支,如果远程同名分支不存在则自动创建同名分支。

--upstream :push当前分支到它的upstream分支上(这一项其实用于经常从本地分支push/pull到同一个仓库的情景,该模式叫做central workflow)。

--simple :simple和upstream是相似的,只是有一点不同,simple必须保证当前本地分支和它的远程upstream分支同名,否则会拒绝。

--matching :push所有本地和远程两端都存在的同名分支(本地分支没有跟踪也会被push上去(没测试过)和simple最大的区别)。

(前四种均是操作的当前分支,这一点很重要)


5、git reset

这里只说明一下reset命令的3中常用方式

1)、$ git reset --mixed :此为默认方法,不带任何参数的git reset,即是这种方法,它回退到某个版本,只保留工作目录,回退commit和index信息。

2)、$ git reset --soft :回退到某个版本,只回退了commit的信息,不会恢复index信息,如果还要提交,直接commit即可。

3)、$ git reset --hard :彻底会退到某个版本,本地的工作目录也会被删除(危险操作)。

(退回的记录可通过git reflog进行查看。


6、git log

git log常用的命令:

1)$ git log -n : 查看前多少条日志记录。默认整屏,也是分页显示的。

2)$ git log --decorate :查看各个分支当前所指的对象。

3)$ git log --pretty=oneline :每个提交信息单行显示。

4)$ git log --abbrev-commit :显示commit-id的简略形式(一般显示前7位)。

3)与4)可使用git log --oneline代替。


还有很多日志输出的形式,这里不一一介绍了。





有异议望留言,共同学习。





1 0