git知识总结-3常用命令原理解析

0.前言

本文主要对git常用命令的工作原理做一个详细的说明,常用命令主要包括:

1.git add

git add相关命令很简单,主要实现将工作区修改的内容提交到暂存区,交由git管理。

2. git commit

git commit主要实现将暂存区的内容提交到本地仓库,并使得当前分支的HEAD向后移动一个提交点。

3. git branch

关于分支,大概有展示分支,切换分支,创建分支,删除分支这四种操作。

4. git merge

merge命令把不同的分支合并起来。如下图,在实际开发中,我们可能从master分支中切出一个分支,然后进行开发完成需求,中间经过R3,R4,R5的commit记录,最后开发完成需要合入master中,这便用到了merge。

注:一般在merge之后,会出现conflict,需要针对冲突情况,手动解除冲突。主要是因为两个用户修改了同一文件的同一块区域。如下图所示,需要手动解除。

5. git rebase

rebase又称为衍合,是合并的另外一种选择。在开始阶段,我们处于new分支上,执行 git rebase dev ,那么new分支上新的commit都在master分支上重演一遍,最后checkout切换回到new分支。

这一点与merge是一样的,合并前后所处的分支并没有改变。

git rebase dev ,通俗的解释就是new分支想站在dev的肩膀上继续下去。rebase也需要手动解决冲突。

注1: merge与rebase的区别,请参考 <<merge与rebase区别>>

注2:在项目中经常使用git pull来拉取代码,git pull相当于是git fetch + git merge,如果此时运行git pull -r,也就是git pull –rebase,相当于git fetch + git rebase

6.  git pull

当你使用git pull时,它将会获取远程服务器(你请求的,无论什么分支)上的代码,并且立即合并到你的本地厂库,Pull是一个高等级的请求,默认会支持Fetch+merge的操作,如果不是为了使用上的方便,你可以完全不使用它。

1 $git checkout localbranch
2 $git pull origin master
3 $git branch
4  master
5 *localbranch

上面的命令会将远程服务器上的master分支合并到localbranch中。

7. git Fetch

fetch和pull很相似,只是fetch不会做任何的合并操作。

1 $git checkout localbranch
2 $git fetch origin remotebranch
3 $git branch
4 master
5 *localbranch
6 remotebranch

因此,fetch指是获取remotebranch,然后创建一个本地copy,你不应该直接对这个copy做任何的操作,而应该应该创建一个本地分支,然后在本地分支上进行工作。

8. git Clone

clone将会克隆一个本地厂库,

1 $cd newfolder
2 $git clone [email protected]:whatever/something.git
3 $git branch
4 *master
5 remotebranch

clone会为它被克隆的远程repo创建一个名为“origin”的local repo,并为远程repo的活动分支创建一个本地分支以及远程跟踪分支。

9. reset

reset命令把当前分支指向另一个位置,并且相应的变动工作区和暂存区。

10. git revert

git revert用一个新提交来消除一个历史提交所做的任何修改

注:revert与reset的区别

(1)git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。

(2)在回滚这一操作上看,效果差不多。但是在日后继续merge以前的老版本时有区别。

因为git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch时,导致这部分改变不会再次出现,减少冲突。

但是git reset是之间把某些commit在某个branch上删除,因而和老的branch再次merge时,这些被回滚的commit应该还会被引入,产生很多冲突。

(3)git reset 是把HEAD向后移动了一下,而git revert是HEAD继续前进,只是新的commit的内容和要revert的内容正好相反,能够抵消要被revert的内容。

11. git push

上传本地仓库分支到远程仓库分支,实现同步。

git push的一般形式为 git push <远程主机名> <本地分支名>  <远程分支名> ,例如 git push origin master:refs/for/master ,即是将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,

第一个master是本地分支名,第二个master是远程分支名

1. git push origin master

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

2. git push origin :refs/for/master 

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

 3. git push origin

   如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支

4. git push

  如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名

5 git push 的其他命令

  这几个常见的用法已足以满足我们日常开发的使用了,还有几个扩展的用法,如下:

(1) git push -u origin master 如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push,不带任何参数的git push,默认只推送当前分支,这叫做simple方式,还有一种matching方式,会推送所有有对应的远程分支的本地分支, Git 2.0之前默认使用matching,现在改为simple方式.如果想更改设置,可以使用git config命令。git config --global push.default matching OR git config --global push.default simple;可以使用git config -l 查看配置

(2) git push --all origin 当遇到这种情况就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要 -all 选项

(3) git push --force origin git push的时候需要本地先git pull更新到跟服务器版本一致,如果本地版本库比远程服务器上的低,那么一般会提示你git pull更新,如果一定要提交,那么可以使用这个命令。

(4) git push origin --tags //git push 的时候不会推送分支,如果一定要推送标签的话那么可以使用这个命令

12.其他命令

参考文档

原文地址:https://www.cnblogs.com/smartjourneys/p/9499639.html

时间: 2024-11-09 01:34:40

git知识总结-3常用命令原理解析的相关文章

【android Studio】零git知识、零脚本命令,即刻体验git版本管理魅力!

git的优点就不去多说了.阻碍咱新手体验它的唯一问题就是门槛太高,脚本看着像天书, 本文主要阐述的,就是如何在android studio上,也能像tfs那样,非常简单的操作,就能使用git进行版本管理 几个月用下来,咱每天要做的就是开始工作前,alt+下方向键,从服务端拉取数据:结束工作后,alt+上方向键,将代码提交到服务器上.就这两步,完成了版本管理. 因此,有了这篇面向新手的图文并茂的文章,一步步按照步骤下来,你就可以完成项目对git的融合. (提示:面向新手的介绍型文章,因此步骤细致繁

Git(二)--常用命令

$ git init  从当前目录初始化 $ git clone git://xxxx  从远程仓库克隆 $ git status 确定哪些文件当前处于什么状态 $ git add 开始跟踪一个新文件 $ git diff  比较工作目录中当前文件和暂存区域快照之间的差异(修改之后还没有暂存起来的变化内容) $ git diff --cached 比较已经暂存起来的文件和上次提交时的快照之间的差异 $ git commit -m 提交 $ git log 查看提交历史 $ git remote 

理解git常用命令原理

git不同于类似SVN这种版本管理系统,虽然熟悉常用的操作就可以满足大部分需求,但为了在遇到麻烦时不至于靠蛮力去尝试,了解git的原理还是很有必要. 文件 通过git管理的文件版本信息全部存放在根目录.git下,稍微看下: $ ls .git COMMIT_EDITMSG HEAD branches description index logs packed-refs FETCH_HEAD ORIG_HEAD config hooks info objects refs git除了提供给我们平时

git开发流程、常用命令及工具

根据我最近使用git的一些经历,git是基于分支的版本控制工具,分支有远程分支和本地分支. 一.开发流程 大致是: 从远程服务器的master,clone一份项目文件到本地,然后本地master的基础上branch一个新的本地分支xname,然后checkout切换到这个本地分支上,开始开发: 开发过程中可以不断的commit到本地, 开发完成之后,把本地分支xname ,push origin到远程分支xname上,(纳尼,这个远程xname我什么时候建立的), 远程分支xname和maste

git开发使用和常用命令

git和svn区别 1.git是分布式版本管理,svn是集中式版本管理2.集中式版本管理: 版本库放在中央仓库(中央服务器),首先你得从中央仓库中获取最新的版本,然后再对文件或者代码进行操作,最后再把你修改的结果推送到中央服务器中.集中式版本管理最大问题就是需要联网才能进行操作,所以提交文件的速度很大程度上取决于网速,而且在局域网和互联网速度影响也挺大的.3.分布式版本管理: 分布式版本管理没有中央仓库,每个人的电脑都是完整的版本库,这样在你工作的时候就不需要联网,因为版本库就在你的电脑上,如果

git的安装和常用命令

1,下载安装方法 http://jingyan.baidu.com/article/020278117cbe921bcc9ce51c.html 2,常用的命令 原文地址: http://www.admin10000.com/document/5374.html Git基本常用命令如下: git pull --rebase origin master git pull origin master mkdir:         XX (创建一个空目录 XX指目录名) pwd:          显示

小蚂蚁学习git(1)——常用命令解释

下载msysgit,它是window版本的git,在linux下最简单的方法就是使用命令: yum install git 一路默认安装即可,打开Git Bash,能够弹出一个类似cmd命令行的窗口,表示成功. 首先,需要设施用户名和邮箱作为一个标识. git    config    --global user.name "xiaomayi" git    config    --global user.email "email" 注意:git config -g

svn,git的对比以及常用命令上篇

之前定制Rom,需要下载android源码,修改系统应用.android源码管理使用repo+git,下载速度快的吓人.(直接下载的话,被墙了当然慢,请忽略这个因素).感觉git更适合大型项目管理.项目经验不是非常多,个人无论大小项目,自己选择的话还是喜欢用git. 个人总结的git优点 1.分支管理非常方便 2.回退,查看历史更加方便,支持命令更多 3.速度更快 4.可以离线提交到本地库,可以离线查看log 5.... 下面参照大牛的介绍,来具体看一下git和svn的不同 参考http://s

Git的配置及常用命令

Git配置 git config --global user.name "<username>" git config --global user.email "<email>" git config --global color.ui true git config --global alias.co checkout git config --global alias.ci commit git config --global alias