Git你必须知道的命令

版本库原理

Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库


image.png

创建版本库

#创建文件
$ mkdir myapp

#进入文件
$ cd myapp

#初始化代码仓库
$ git init

#把需要提交的所有修改放到暂存区(Stage)
$ git add file

#提交所有文件
$ git add . 

#提交所有.js格式文件
$ git add *.js

#强制添加
$ git add -f file

#提交代码
$ git commit -m "commit info"

查看

#查看历史记录,git log命令显示从最近到最远的提交日志
$ git log

#查看分支合并图
$ git log --graph

#Git提供了一个命令git reflog用来记录你的每一次命令:
$ git reflog

#git status命令用于显示工作目录和暂存区的状态。使用此命令能看到那些修改被暂存到了, 哪些没有, 哪些文件没有被Git tracked到。git status不显示已经commit到项目历史中去的信息。
$ git status

#当暂存区中没有文件时,git diff比较的是,工作区中的文件与上次提交到版本库中的文件。
#当暂存区中有文件时,git diff则比较的是,当前工作区中的文件与暂存区中的文
$ git diff

#比较工作区中的文件与版本库中文件的差异。HEAD指向的是版本库中的当前版本,而file指的是当前工作区中的文件。
$ git diff HEAD -- file

版本回退


#Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,上一个版本就是HEAD^,上上一个版本就是HEAD^^,当回退版本较早时可以写成HEAD~100。

#版本回退
$ git reset --hard HEAD^

#取消回退,commitId为你想要回到的未来版本号
$ git reset --hard commitId

撤销修改

命令git checkout ——file 把文件在工作区的修改全部撤销,这里有两种情况:

  • 一种是file修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
  • 一种是file已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
#从版本库删除一个文件
$ git rm file

添加远程仓库


#关联一个远程库
$ git remote add origin <address>
#第一次将本地库的所有内容推送到远程库上
$ git push -u origin master [-f]

#此后,每次本地提交后,就可以使用命令推送最新修改
$ git push origin master

从远程库克隆

#
git clone [url]

比如,要克隆 Ruby 语言的 Git 代码仓库 Grit,可以用下面的命令:


#这会在当前目录下创建一个名为grit的目录,其中包含一个.git的目录,用于保存下载下来的所有版本记录,然后从中取出最新版本的文件拷贝。如果进入这个新建的grit目录,你会看到项目中的所有文件已经在里边了,准备好后续的开发和使用。

$ git clone git://github.com/schacon/grit.git

如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在上面的命令末尾指定新的名字:

#唯一的差别就是,现在新建的目录成了mygrit,其他的都和上边的一样。
$ git clone git://github.com/schacon/grit.git mygrit

分支管理

image.png
创建+切换分支:
$ git checkout -b <name>

创建分支:
$ git branch <name>

切换分支:
$ git checkout <name>

查看分支:
#git branch命令会列出所有分支,当前分支前面会标一个*号。
$ git branch

切换分支:
#切换回master分支
$ git checkout <name>

合并某分支到当前分支:
$ git merge <name>

删除分支:
$ git branch -d <name>
Git分支十分强大,在团队开发中应该充分应用。
合并分支时,加上—no-ff参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而fast forward合并就看不出来曾经做过合并。


储藏

储藏可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。

现在你想切换分支,但是你还不想提交你正在进行中的工作;所以你储藏这些变更。为了往堆栈推送一个新的储藏,只要运行git stash。把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。

git stash
需要说明一点,stash是本地的,不会通过git push命令上传到git server上。

查看现有的所有储藏,此命令显然暗示了git stash可以多次保存工作进度,并用在恢复时候选择。

$ git stash list

重新应用已经实施的储藏(不删除储藏)

#如果你想应用更早的储藏,你可以通过名字指定它,像这样:git stash apply stash@{2}。如果你不指明,Git 默认使用最近的储藏并尝试应用它
$ git stash apply [--index] [<stash>]

重新应用已经实施的储藏(删除储藏)

#如果不使用任何参数,会恢复最新保存的工作进度,并将恢复的工作进度从存储的工作进度列表中清除。
#如果提供<stash>参数(来自git stash list显示的列表),则从该<stash>中恢复。恢复完毕也将从进度列表中删除<stash>。
#选项--index除了恢复工作区的文件外,还尝试恢复暂存区。
$ git stash pop [--index] [<stash>]

删除一个存储的进度。(默认删除最新的进度)

$ git stash drop [<stash>]

清空当前所有的stash

$ git stash clear

基于储藏进度创建分支。

$ git stash branch <branchname> <stash>

多人协作

查看远程库的信息:

#或者用git remote -v 可显示更详细的信息
$ git remote

推送分支,该分支上的所有本地提交推送到远程库:

$ git push origin <branch-name>

从本地推送分支,如果推送失败,先抓取远程的新提交:

$ git pull

【实例1】新增README.md,添加到暂存区,再提交到本地仓库

    $ cd hello
    $ echo "# test" >> README.md
    $ git add README.md
    $ git commit -m "add README.md"
There is no tracking information for the current branch.

Please specify which branch you want to merge with.

See git-pull(1) for details

git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with

git branch --set-upstream master origin/<branch>

解决方案:指定当前工作目录工作分支,跟远程的仓库,分支之间的链接关系。

比如我们设置master对应远程仓库的master分支

git branch --set-upstream master origin/master

这样在我们每次想push或者pull的时候,只需要 输入git push 或者git pull即可。

在此之前,我们必须要指定想要push或者pull的远程分支。

git push origin master

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

推荐阅读更多精彩内容

  • 1. 安装 Github 查看是否安装git: $ git config --global user.name "...
    Albert_Sun阅读 13,617评论 9 163
  • 这篇笔记是为了学习Git知识而收集总结的,主要是看受一篇帖子《你可能不知道的15条Git命令》的影响,才想记录这篇...
    WEB全栈开发陈老师阅读 1,281评论 0 0
  • 一、基本概念: 注:对于git的分布式概念及其优点,不重复说明,自己百度或谷歌。本文中涉及到指令前面有$的,在cm...
    大厂offer阅读 1,396评论 0 3
  • 安装Git Git的下载地址:Git官网下载地址 Git本地仓库和命令 配置用户 下载完Git后,右键会有一个Gi...
    TokyoZ阅读 4,482评论 1 7
  • 以下笔记主要参考gitgot,大致了解git使用和原理。 第一部分我们从个人的视角去研究如何用好Git,并且揭示G...
    carolwhite阅读 2,351评论 0 1