Git学习

  1. 创建git仓库命令git init
  2. 创建成功后添加要进行管理的文件,执行git add <file>将文件进行添加,然后执行git commit -m"xxx"进行commit。
  3. 使用git status进行查看当前管理文件的状态,若发生变化,执行git diff可以查看文件变更的状态。
  4. 使用git log查看git的历史纪录,显示的内容是由最近提交到最远提交的。
$ git log
commit 3628164fb26d48395383f8f31179f24e0882e1e0
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 15:11:49 2013 +0800

    append GPL

commit ea34578d5496d7dd233c827ed32a8cd576c5ee85
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Tue Aug 20 14:53:12 2013 +0800

    add distributed

commit cb926e7ea50ad11b8f9e909c05226233bf755030
Author: Michael Liao <askxuefeng@gmail.com>
Date:   Mon Aug 19 17:51:55 2013 +0800

    wrote a readme file

例如执行git log后出现上面的内容,每个commit后一串字符串表示commit id(版本号)。若感觉看起来比较复杂,可以加上--pretty=oneline参数。

$ git log --pretty=oneline
3628164fb26d48395383f8f31179f24e0882e1e0 append GPL
ea34578d5496d7dd233c827ed32a8cd576c5ee85 add distributed
cb926e7ea50ad11b8f9e909c05226233bf755030 wrote a readme file

在Git中,使用HEAD表示当前版本,也就是上面commit id 3628...指定的提交,上一个版本是HEAD^,上上个版本是HEAD^^。当然往上100个版本通过HEAD~100

  1. 如果要指定回退到上一个版本,那么执行git reset --hard HEAD^.这时候会回到add distributed的提交那里。而append GPL则丢失了,如果我想要再返回原来的状态怎么办,这时候commit id就有用了。只需要指定:git reset --hard 3628164就可以指定回到未来的某个版本。这里3628164只是前几位,不必写全,只要git能够追踪到就好。这里通过reset操作,就是操作当前HEAD指针的移动。当你回退到某个版本,你关掉了电脑,第二天才想重回到新版本怎么办,找不到了commit id。不用担心,Git提供了一个命令git reflog来记录你的每一次命令。
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file

从上面便看到了commit id

  1. Git工作区和暂存区。工作区就是在电脑上能看到的目录。工作区有一个隐藏目录.git,这个不是工作区,而是Git的版本库。Git版本库中有很多东西,其中最主要的是成为stage的暂存区,还有Git自动为我们创建的第一个分支master,以及指向master的一个指针HEAD。我们把文件往Git版本库中添加的时候,分两步执行。 git add所做的操作就是把文件添加进去,实际上把文件修改添加到暂存区。git commit提交更改,就是吧暂存区的所有内容提到当前分支。
  2. 撤销修改操作。当你修改文件,还没有add的时候发现修改是有问题的,可以使用git checkout --file丢弃在工作区的修改。这时候会有两种情况,一种是file自修改后还没有放到暂存区,现在撤销修改就回到和版本库一模一样的状态。一种是file已经添加到暂存区后,又做了修改,现在撤销修改就回到添加到暂存区后的状态。总之就是让文件回到最近一次git commitgit add时的状态。
  3. 加入已经通过git add进行了操作,同样可以使用git reset HEAD file可以把暂存区的修改撤销(unstage),重新放回工作区。git reset既可以回退版本,也可以把暂存区的修改回退到工作区。当我们使用HEAD时,表示最新的版本。
  4. 删除文件。rm file对文件进行了删除。这时候工作区和版本库就不一致了,如果确实要从版本库中删除该文件,那么使用命令git rm删除。并且git commit提交。
  5. Git合并分支。命令git merge <branch name>这里合并是fast forward模式的。如果要强制禁用fast forward模式,在喝冰的时候加入参数--no-ff.例如:git merge --no-ff -m"merge with no-ff <branch name>"因为在不用fast forward下合并分支的时候会创建一个新的commit点,所以要加上-m把commit描述加上去。
  6. stash用法。当你在当前分支修改一个业务的时候,出现了bug,这时你还不想提交当前的修改但是又不得不修复bug。于是可以使用git stash将当前的修改储存起来。这时候使用git status会发现工作区是干净的。于是你可以重新切分支修改bug。当修改完毕后,再次返回到刚刚的业务分支,要把储存的工作拿出来。有两个方法可以使用:a.使用git stash apply恢复,但是恢复后stash内容不删除,还要使用git stash drop来删除。b.使用git stash pop,恢复的同时也把stash内容删除了。使用git stash list可以查看存起来的内容有哪些。你可以多次stash,恢复的时候先使用git stash list查看,然后在恢复指定的stash,命令为:git stash apply stash@{x}其中x表示对应的恢复点。
  7. 强行删除一个未被合并过的分支。git branch -D <branch name>
  8. Git创建标签。首先切换到要打标签的分支,然后git tag <name>就打上标签,git tag查看当前分支的所有标签。默认标签是打在最新提交的commit上。有时候,如果忘了打标签,比如今天突然想起来前天的标签忘记打,怎么办?方法是找到历史提交的commit id,然后打上就可以。
git log --pretty=oneline --abbrev-commit
6adfsjs merged bug fix 101
cc17934 fix bug 
6223456 add merge 

比如我要对add merge打标签,对应的commit id是6223456,只需要git tag <name> 6223456即可对该commit打上标签。

  1. 创建带有说明的标签。git tag -a <tagname> -m "commit describtion" 6223456。用命令git show <tagname>查看详细tag信息。
  2. 将tag推送到远程。git push origin <tagname>推送一个本地标签到远程。 git push origin --tags将全部未推送过的本地标签到远程。git tag -d <tagname>删除本地标签。git push origin :refs/tags/<tagname>删除一个远程标签。
  3. 配置别名
    git status配置git st
    git config --global alias.st status
    别的举例:
$ git config --global alias.co checkout
$ git config --global alias.ci commit
$ git config --global alias.br branch
  1. git fetch会更新remote master的索引。即该命令执行后,会将远程remote分支上的更新一起拉去下来。
  2. git diff如果要查看尚未加入暂存的文件更新了哪些部分,使用git diff.不加参数的该命令是比较工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容。若要查看已经暂存起来的文件和上次提交时的快照之间的差异,可以用git diff --cached命令(Git1.6.1及更高版本还允许使用git diff --staged效果是相同的)。有时候暂存了所有更新的文件后,使用git diff什么也没发现就是这个原因。
  3. ********跳过使用暂存区域。********Git提供了一个跳过使用暂存区的方式,只要在提交时候,给git commit加上-a选项,Git就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过git add步骤。
  4. ********取消已经暂存的文件********。我们在提交的时候,本来想要分开提交,但是一不小心使用了git add.全加到了暂存区。如果要撤销对应的其中某个文件,则使用git reset HEAD <filename>来将文件撤销到之前已修改但是未暂存的状态。
  5. ********取消对文件的修改********。如果感觉对刚刚文件的修改完全没必要,要撤销刚刚的修改,回到之前的状态,则使用git checkout --<filename>来撤销对文件的修改。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容

  • Git教程 一、Git简介 1.1. Git的诞生1.2.集中式的vs分布式 二、安装Git 三、创建版本库 四、...
    曹渊说创业阅读 935评论 0 2
  • 刚刚走出了大学校园,身上满满地都是书卷气,幼稚气。一缕阳光透过树叶斜射在你我身上,暖融融地。那份宁静,那份闲逸...
    05075c283597阅读 421评论 0 0
  • 睡觉前与付先森吵了一架,于是收获了一个不安稳的夜,做了一个长长的梦。 梦境很纠结,从前的时光和人物全都跳将出来,面...
    sweet小树阅读 270评论 0 1
  • 一、名人解读 1、山东农业大学讲师谢丽霞:同样的新闻,经白岩松的嘴一说就非常走心,关键之处的反问总能引起观众的思考...
    金零阅读 901评论 0 9