Git核心命令的分组对比总结

git中有一些命令非常相似,使用时容易混淆。本文采用对比的方式总结了git中常用的一些核心命令。

第一组:git pull / git fetch / git pull --rebase

首先是git pull与git fetch,两者都是从远程仓库拉取代码的命令,其中git pull = git fetch + git merge. 相比而言,git pull从远程仓库中拉取代码到本地,并将代码merge进当前分支中;而git fetch则仅仅是将远程仓库的代码拉取到本地,并没有merge到当前分支的操作。一般情况下,我们很少使用git pull命令,而是使用git fetch+git merge的命令组合。原因在于,git pull命令直接将从远程仓库拉取到的代码merge到当前分支,使得我们在没有看清新的改动的情况下就已经将代码merge到本地当前分支,也容易出现冲突,并造成错误,而git fetch则给我们一个察看新的改动的机会,使得merge的工作更加顺利。

再看git pull --rebase,也是从远程仓库拉取代码的命令。简单来看,git pull --rebase = git fetch + git rebase, git pull --rebase不仅从远程仓库拉取代码到本地,而且它将远程仓库中拉取的所有commit直接提交到当前分支中去,并且这些提交的commit要早于当前分支中已提交且尚未push的commit。如果有冲突,那么我们需要手动解决冲突,并且运行命令git rebase --continue。使用git pull --rebase的好处在于,我们可以得到一个非常干净清爽的分支,使得分支走在一条直线上,而不存在各种merge的分支出现。

第二组: git reset --soft / git reset --mixed / git reset --hard

git reset是将代码或者操作进行还原的命令,它分成三类。

首先git reset --soft,这个命令是git reset中最为温和的一个,它仅仅是撤销之前的git的commit操作,但不会丢弃之前的改动,而且新的改动会被存放在index区中。最常用于撤销之前的commit,但需要保留commit中的修改。比如,当我们发现之前commit中存在编译错误的问题时,我们该如何修改呢?其中的一个很好的方法就是使用git reset --soft,它既做到了撤销之前的commit,并且还可以保留之前的改动,进而可以对编译错误的问题就行调试修改。

其次git reset --hard,这是这组命令中最为激进的一种方式。它不仅可以还原之前的操作,而且会丢弃之前修改的内容。这个命令需要慎用,因为命令执行之后,代码丢弃的代码将无法找回。git reset --hard最常使用在确实需要丢弃修改的地方,比如我们需要将当前工作区中的代码丢弃的时候,我们可以使用这条命令。

最后git reset --mixed,和git reset --soft更为接近,它也用于撤销之前的commit的操作,且不会丢弃修改的内容,但它执行完毕之后并不会将修改存放在index区,而是存放在unstaged区域中。

第三组:git checkout / git checkout -b

git checkout命令用于分支切换,它将在不同的分支间进行转换操作。一般的格式为git checkout <branch name>,在checkout之前,目标分支需要提前创建。因此我们切换分支的一般的流程是,首先利用git branch <branch name>创建一个新的分支,然后使用git checkout <branch name>切换到新创建的分支上去,进行具体的代码的开发。而git checkout -b <branch name>,是实现这些操作的简化的命令,可以达到同样的效果。

第四组:git add / git commit / git push

这组操作其实没有什么容易混淆疑难之初,放在这里的原因在于,它们是git正常工作流上的一些关键命令。一般情况下,我们使用git进行版本控制,首先我们工作与unstaged区域,我们使用git add的操作将修改的代码放入index区域,然后利用git commit将代码提交到本地仓库中去,最后使用git push将代码推到远程分支,完成任务。这条主线使得我们的工作方式更加清晰明了。

第五组:  git commit / git commit -a

git commit命令将index区域中的内容提交到本地仓库中去,这个命令非常简单。我们知道要讲修改的内容提交到本地仓库,首先需要将unstaged区域中的修改放入index中,然后才可以提交。那么有没有一种方法可以使得我们无需手动将修改放入index区,而直接提交到本地仓库呢?有,就是这个命令git commit -a,它可以做到这一点。具体的命令实例如下:

git commit -a -m "commit message"

第六组: git stash apply / git stash pop

Stash区域是暂存修改的地方。比如,我们在当前分支上进行了修改,这些修改还不能commit到本地仓库中去,但是这时我们又需要切换到另外一个分支上进行工作。怎么办呢?这时候就是stash区域大显身手的时候了。我们可以通过将修改暂存于stash区域中,实现此操作,具体命令即: git stash。那么我们如何将之前暂存的修改取出呢?一般来说两种方法:

第一种:git stash apply,它可以将修改从stash区域中取出,且不会删除stash区域中暂存的内容;第二种:git stash pop则不同,它先将修改取出,然后删除stash暂存的此条记录。

第七组: git cherry-pick / git checkout

之前说过,git checkout可以用于切换分支,另外它还可以切换不同的commit。我们可以通过git checkout <commit id>命令来切换到不同的commit id上进行工作。

git cherry-pick则不同,它不会切换commit,而是从其他的分支上“采摘”一些commit到当前的分支,值得注意的是这些新“采摘”来的commit会被直接提交到当前分支的本地仓库中去。

第八组:git reset / git revert

刚才提到了git reset命令,一方面它可以撤销之前的commit操作,另一方面它还可以决定是否丢弃撤销的commit中的修改;

git revert和它有些相似之处,它也会撤销之前的commit,但是两者不同的是,git revert可以撤销仓库中任意一个commit而不改变commit历史结构,然而git reset则不同,它不能随意的撤销任意一个commit,而是在选择撤销的commit之后的所有的commit都会被撤销,这是它们的最大不同之处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,723评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,080评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,604评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,440评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,431评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,499评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,893评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,541评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,751评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,547评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,619评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,320评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,890评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,896评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,137评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,796评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,335评论 2 342

推荐阅读更多精彩内容

  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 8,449评论 1 26
  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,626评论 9 163
  • 1.git的安装 1.1 在Windows上安装Git msysgit是Windows版的Git,从https:/...
    落魂灬阅读 12,645评论 4 54
  • “我也是一天上8小时班,下班后很累了,为什么非得我去做饭?”在即将订婚的女朋友不止一次给我抱怨过这个问题后,矛盾的...
    水獭_4175阅读 479评论 0 0
  • 我与世界只差一个你吗?12个故事,不同的人生,那些温暖的悲伤的遗憾的故事终究是故事,与我的生活相差很远,原来最不容...
    多梦的人儿阅读 228评论 0 0