Git的版本库里存了不少东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为咱们自动建立的第一个分支master,以及指向master的一个指针叫HEAD。
工做区有一个隐藏目录.git,这个不算工做区,而是Git的版本库前端
#建立文件 $ 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 把文件在工做区的修改所有撤销,这里有两种状况:git
* 一种是file修改后尚未被放到暂存区,如今,撤销修改就回到和版本库如出一辙的状态; * 一种是file已经添加到暂存区后,又做了修改,如今,撤销修改就回到添加到暂存区后的状态。
#文件在工做区的修改所有撤销 $ git checkout --file
命令git rm用于从版本库删除一个文件。
若是一个文件已经被提交到版本库,那么你永远不用担忧误删,可是要当心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。github
#从版本库删除一个文件 $ git rm file
提示:先手动删除文件,而后使用git rm <file>和git add<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
若是但愿在克隆的时候,本身定义要新建的项目目录名称,能够在上面的命令末尾指定新的名字:segmentfault
#惟一的差异就是,如今新建的目录成了mygrit,其余的都和上边的同样。 $ git clone git://github.com/schacon/grit.git mygrit
建立+切换分支:app
$ git checkout -b <name>
建立分支:url
$ git branch <name>
切换分支spa
$ 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
推荐阅读:
2019年前端面试题-01
2019年前端面试题-02
2019年前端面试题-03
2019年前端笔试题
我是Cloudy,年轻的前端攻城狮一枚,爱专研,爱技术,爱分享。
我的笔记,整理不易,感谢阅读、点赞和收藏。
文章有任何问题欢迎你们指出,也欢迎你们一块儿交流前端各类问题!