Git - 常用命令

git init  :初始化项目

        在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹

git clone :克隆

        获取一个URL对应的远程git repo,创建一个local copy

        一般的格式为: git clone [url]

        clone下来的repo会以URL最后一个斜线后面的名称命名,创建一个文件夹,如果想要指定特定的名称,可以git clone [url] [newname] 指定

git status :查询repo的状态

        -s:表示short ,-s的输出标记会有两列,第一列是对staging区域,第二列是对working目录

git log :显示提交历史和分支

        --oneline --number:每条log只显示一行,显示number条数

        --oneline --number --graph:可以图形化地表示出分支合并历史

        [ branchname ] :可以显示特性分支的log

        --oneline branch1 ^branch2 : 查看在分支1,却不在分支2中的提交。^:表示排出这个分支(Windows下 ^branch2要加引号)

        --decorate: 显示出tag信息

        --author=[author name] :指定作者名的提交历史

        --since --before --until --after :根据提交时间筛选log

        --no-merges :可以将 merge 的 commits 排除在外

        --grep :根据 commit 信息过滤 log :git log --grep=keywords

        默认情况下,git log --grep --author 是 or 的关系 :满足一条即被返回,如果你想让他们是and的关系,可以加上 --all-match 的option。

        -S <string>:filter by introduced diff.

        比如:git log -S methodName (注意S和后面的磁之间没有等号分隔符)

        -p :show patch introduced at each commit

        每一个提交都是一个快照(snapshot),git 会把每次提交的diff计算出来,作为一个patch显示给你看

        另一种方法是 :git show [SHA]

        --stat : show diff of changes introduced at each commit

        同样是用来看改动的相对信息的,--stat 比 -p 输出更简单些

git add

        在提交之前,git 有一个暂存区(staging area),可以放入新添加的文件或加入新的改动。commit时提交的改动是上一次加入到staging area中的改动,而不是我们disk上的改动。

        add <文件名(绝对路径或相对路径)>  :会递归地添加当前工作目录中的所有文件

git diff

        不加参数的git diff :show diff of unstaged changes  

        此命令比较的是工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容

        若要看已经暂存起来的文件和上次提交时的快照之间的差异,可以用:git diff --cached命令。

        --cached :show diff of staged changes

        (git 1.6.1 及更高版本还允许使用 git diff --staged,效果是相同的)

        HEAD :show diff of all staged or unstated changes.

        也是比较working directory 和上次提交之间所有的改动。

 

        如果想看自从某个版本之后都改动了什么可以用:git diff [ version tag ] 跟log命令一样,diff也可以加上--stat参数来简化输出

        git diff [ branchNameA ] [branchNameB] :可以用来比较两个分支

            :他实际上会返回一个由A到B的patch,不是我们想要的结果。

         一般我们想要的结果是两个分支分开以后各自的改动都是什么,是由命令:git  diff [ branchA ] ... [ branchB ] 给出的。实际上他是:git diff $(git merge-base [branchA] [branchB] ) [branchB]的结果。

git commit :提交已经被add进来的改动

        -m :"添加提交信息"

        -a : 会先把所有已经 track 的文件的改动add进来,然后提交(有点想SVN的一次提交,不用先暂存)。对于没有 track 的文件,还需要git add一下

        -amend :增补提交,会使用与当前提交节点相同的父节点进行一次新的提交,旧的提交将会被取消。

git rest :撤销更改或提交

        这里的HEAD关键字指的是当前分支最末梢最新的一个提交,也就是版本库中该分支上的最新版本。

        HEAD :unstage files from index and reset pointer to HEAD

             这个命令用来把不小心add进去的文件从staged状态取出来,可以单独针对某一个文件操作 :git reset HEAD --filename (filename前的 -- 也可以不加。)

        --soft : 将HEAD移动到特定的提交引用,索引和分段不变。

        --hard :unstage的文件并撤消自上次提交以来工作目录中的任何更改。

            使用 git reset --hard HEAD <commit 的哈希码>/^HARD 进行一次reset,即上次提交之后,所有staged的改动和工作目录的改动都会消失,还原到上次提交的状态。 这里的HEAD 可以被写成任何一次提交的SHA-1(commit的哈希码)。

        不带soft和hard参数的git reset,实际上带的是默认参数mixed。

    总结:

        --mixed ID :试讲 git 的 HEAD 变了(也就是提交记录变了),但文件并没有改变,(也就是working tree 并没有改变)。取消了commit和add的内容

        --soft ID :实际上,是 git reset --mixed ID 后又做了一次git add 。 即取消了commit的内容

        --hard ID:是将 git 的 head 变了,文件也变了

        改动范围如下:

            soft(commit) < mixed (commit + add) < hard (commit + add + local working)

git revert :

        反转撤销提交,只要把出错的提交(commit)的名字(reference)作为参数传给命令就可以了。

        HEAD :撤销最近的一个提交,git revert 会创建一个反向的新提交,可以通过参数 -n 来告诉git先不要提交

git r m :

        file :从 staging 区移除文件,同时也移除工作目录。

        --cached :从staging去移除文件,但留在工作目录中。从功能上等同于git reset HEAD,清楚了缓存区,但不动工作目录树。

git clean:从工作目录中移除没有track的文件(没搞懂,最好不用)

        -d :表示同时移除目录

        -f  :表示force,因为在git的配置中,clean.requireForce=true,如果不加-f,clean将会拒绝执行

git mv :(喵喵喵???)

        git r m --cached orig;mv orig new;git add new

git stash :把当前的改动压入一个栈。

    git stash 将会把当前目录和index中的所有改动(但不包括未track的文件) 压入一个栈,然后留给你一个clean的工作状态,即处于上一次最新提交处

        list : 会显示这个栈的list

        apply:取出stash中的上一个项目(stash@{0}),并且应用于当前的工作目录。也可以指定别的项目,比如git stash apply stash@{1}。

        如果你在应用stash中项目的同时想要删除它,可以用git stash pop

 

    删除stash中的项目:

        drop :删除上一个,也可指定参数删除指定的一个项目

        clear:删除所有项目

git branch:显示所有分支

        

        

posted @ 2018-09-28 09:35  焦国峰的随笔日记  阅读(210)  评论(0编辑  收藏  举报
// ############################### // ##############################