美文网首页
git 的使用

git 的使用

作者: hades574 | 来源:发表于2016-01-29 19:01 被阅读0次

    首先我们来看几个术语

    HEAD

    这是当前分支版本顶端的别名,也就是在当前分支你最近的一个提交

    Index

    index也被称为staging area,是指一整套即将被下一个提交的文件集合。他也是将成为HEAD的父亲的那个commit

    Working Copy

    working copy代表你正在工作的那个文件集

    Flow

    当你第一次checkout一个分支,HEAD就指向当前分支的最近一个commit。在HEAD中的文件集(实际上他们从技术上不是文件,他们是blobs(一团),但是为了讨论的方便我们就简化认为他们就是一些文件)和在index中的文件集是相同的,在working copy的文件集和HEAD,INDEX中的文件集是完全相同的。所有三者(HEAD,INDEX(STAGING),WORKING COPY)都是相同的状态,GIT很happy。

    当你对一个文件执行一次修改,Git感知到了这个修改,并且说:“嘿,文件已经变更了!你的working copy不再和index,head相同!”,随后GIT标记这个文件是修改过的。

    然后,当你执行一个gitadd,它就stages the file in the index,并且GIT说:“嘿,OK,现在你的working copy和index区是相同的,但是他们和HEAD区是不同的!”

    当你执行一个git commit,GIT就创建一个新的commit,随后HEAD就指向这个新的commit,而index,working copy的状态和HEAD就又完全匹配相同了,GIT又一次HAPPY了。

    Reset

    如果你仔细研究reset命令本身就知道,它本身做的事情就是重置HEAD(当前分支的版本顶端)到另外一个commit。假设我们有一个分支(名称本身无所谓,所以我们就简单称为"super-duper-feature”分支吧),图形化表示如下:

    如果我们执行:

    git reset HEAD

    任何事情都不会发生,这是因为我们告诉GIT重置这个分支到HEAD,而这个正是它现在所在的位置。

    git reset HEAD~1

    当我们再执行上面的命令时(HEAD~1是“the commit right before HEAD”的别名,或者说:put differently "HEAD‘s parent"),我们的分支将会如下所示

    如果我们执行git reset HEAD~2,则意味着将HEAD从顶端的commit往下移动两个更早的commit。

    Parameters

    soft

    --soft参数告诉Git重置HEAD到另外一个commit,但也到此为止。如果你指定--soft参数,Git将停止在那里而什么也不会根本变化。这意味着index,working copy都不会做任何变化,所有的在original HEAD和你重置到的那个commit之间的所有变更集仍然在stage(index)区域中。

    2.hard

    --hard参数将会blow out everything.它将重置HEAD返回到另外一个commit(取决于~12的参数),重置index以便反映HEAD的变化,并且重置working copy也使得其完全匹配起来。这是一个比较危险的动作,具有破坏性,数据因此可能会丢失!如果真是发生了数据丢失又希望找回来,那么只有使用:git reflog命令了

    3.mixed(default)

    --mixed是reset的默认参数,也就是当你不指定任何参数时的参数。它将重置HEAD到另外一个commit,并且重置index以便和HEAD比配,但是也到此为止。working copy不会被更改。所以所有从original HEAD到你重置到的那个commit之间的所有变更仍然保存在working copy中,被标示为已变更,但是并未staged的状态


    分支管理

    查看本地分支  git branch

    查看远程分支  git branch -r

    查看所有分支  git branch -a

    创建本地分支(test)  git branch test

    创建远程分支(test)  git push origin test

    删除本地分支  git branch -d test

    删除远程分支  git push origin :test

    代码回滚

    index内的回滚

    git reset

    git checkout .

    git代码库回滚: 指的是将代码库某分支退回到以前的某个commit id

    【本地代码库回滚】:

    git reset --hard commit-id :回滚到commit-id,讲commit-id之后提交的commit都去除

    git reset --hard HEAD~3:将最近3次的提交回滚

    【远程代码库回滚】:

    这个是重点要说的内容,过程比本地回滚要复杂

    应用场景:自动部署系统发布后发现问题,需要回滚到某一个commit,再重新发布

    原理:先将本地分支退回到某个commit,删除远程分支,再重新push本地分支

    操作步骤:

    1、git checkout the_branch

    2、git pull

    3、git branch the_branch_backup //备份一下这个分支当前的情况

    4、git reset --hard the_commit_id //把the_branch本地回滚到the_commit_id

    5、git push origin :the_branch //删除远程 the_branch

    6、git push origin the_branch //用回滚后的本地分支重新建立远程分支

    7、git push origin :the_branch_backup //如果前面都成功了,删除这个备份分支

    相关文章

      网友评论

          本文标题:git 的使用

          本文链接:https://www.haomeiwen.com/subject/tkoehttx.html