美文网首页
git 知识点

git 知识点

作者: Rangethan | 来源:发表于2016-09-11 20:32 被阅读82次

    参考
    https://github.com/geeeeeeeeek/git-recipes/wiki

    git push [远程仓库名] [本地分支名] : [远程分支名]

    push本地develop分支到远程origin仓库的dev分支。

    git push origin develop:dev
    

    如果终端所在的当前分支就是要push到远程仓库的本地分支的话,一般省略掉本地分支名,直接用以下命令,将本地当前分支push到远程的dev分支上去。

    git push origin dev
    

    如果想指定将本地分支上的某个commit push到远程分支上的话,比如将最新一次commit push到远程去,可以用:

    git push origin HEAD:dev。
    

    以此类推,push 最新一次commit的前一次可以用:

    git push origin  HEAD^:dev
    

    删除掉远程dev分支可用以下命令,该命令可以理解为将本地的空push到远程分支上,即,删除远程分支。

    git push origin : dev 
    

    push后面加参数-u:

    git push -u origin develop : dev
    

    加上该参数,除了push之外,还做了一件事(由-u参数控制):
    Branch develop set up to track remote branch dev from origin
    即,创建了track。
    这样以后,就可以直接使用“git pull”了,该命令会自动pull远程的dev分支到本地的develop分支上。
    若在push时不加-u参数,则在“git pull”时,将会提示:
    There is no tracking information for the current branch. Please specify which branch you want to merge with.
    也就是,在使用“git pull”时,需要明确指明是从哪个远程分支上去拉:

    git pull origin dev
    

    也可以set tracking information for this branch:

    git branch --set-upstream-to=origin/dev develop
    

    push后面加参数-f:

    git push -f origin HEAD:dev
    

    -f参数即force之意,执行强制push,这样会冲掉远程已提交的版本。

    git remote add <shortname> <url>

    给本地仓库添加一个远程仓库,<shortname> 给远程仓库起一个简洁的名字,默认用origin这个名字来代表远程仓库,<url>远程仓库的地址。
    like this:

    git remote add origin https://github.com/Zouyiran/learngit
    

    git remote 列出当前这个本地仓库下所有的远程仓库的名字,比如如果只有origin,那就会显示origin这个远程仓库,如果想看仓库具体的url地址的话,用如下命令:

    git remote -v
    

    git checkout -b [本地跟踪分支名] [远程仓库名]/[远程分支名]

    checkout是与当前工作区有关的操作命令,用于更新工作区

    git checkout -b develop origin/dev
    

    以上命令做了两件事:
    首先,创建(由-b参数控制)本地分支track(跟踪)远程分支,Branch develop set up to track remote branch dev from origin.
    其次,切换(checkout)到该本地分支上,Switched to a new branch 'develop'.

    git checkout -b develop 
    

    以上命令,单纯的在本地创建develop分支,并切换到这个分支上去。

    git checkout develop
    

    以上命令,针对本地已经存在develop分支的情况,直接将工作区的内容切为develop分支。

    git checkout HEAD
    

    以上命令,将工作区的内容切为当前分支的最新commit。
    这个操作适用于,基于最新的commit,本地工作区又做了一些更改,且想放弃这些更改,回到最新commit的状态。

    以此类推,

    git checkout HEAD^
    

    以上命令,将工作区的内容切为当前分支的最新commit的上一次commit。

    git checkout -- <某些文件>
    

    以上命令,将工作区中某些文件的修改抛弃掉,让这些文件与暂存区或者版本库保持一致。
    其中,如果暂存区有,就回到与暂存区一致的状态,否则,回到到版本库中最新的commit一致的状态。

    git reset <commit version>

    看这里

    reset是与版本库有关的操作命令。

    它会将版本库的HEAD指针定位到某个commit版本上。
    比如:HEAD^ 前一个commit,HEAD^^ 前前一个commit,以此类推...

    重点介绍三个参数:

    • --soft 只有版本库变了,暂存区和工作区都不会被改变。
    • --mixed (默认)版本库和暂存区变了,工作区不会被改变。
    • --hard 版本库、暂存区和工作目录都被改变,都变成定位到的那个commit版本了。

    我一般用默认和--hard这两个比较多。

    git revert <commit version>

    git revert 比 git reset 要安全,同样是针对本地版本库的操作,它会将撤销commit的操作作为新的commit,添加到之前最新commit之后。

    所以,可以这样去理解:

    • git revert:把撤销已有的commit作为新的commit。
    • git reset:纯粹的撤销已有的commit。

    git rebase

    看这里

    理解rebase的关键点在于:
    rebase会为当前分支上每一个提交创建一个新的提交,重写了项目历史。

    看图说话:

    master和feature分支 在feature分支上reabase master分支

    可以看出,通过rebase命令,原feature分支上的三次提交都被重新改写了
    (图中,通过在每个commit点中间画※号来表示提交的内容跟原来不一样)。
    去看diff的话,就可以发现,rebase之后的diff跟rebase之前的同一次commit的diff不一样了。
    这很好理解,比如就拿feature分支的第一次commit来说,rebase之前的这次commit是基于第二个白色点的,而rebase之后的这次commit是基于第二个蓝色点的。所以diff当然不一样了。

    合并多个commit

    看这里
    git rebase -i xxxx

    修改历史commit信息

    修改最近一次commit信息,很简单:

    git commit --amend
    

    但是如果要修改历史commit中的某一次提交信息怎么操作?
    比如,我想要修改倒数第四次commit中的提交信息。
    首先,

    git rebase -i HEAD~4
    

    以上命令执行之后,会出现:

    pick 762eb478 id: xxx cause: xxx solution: xxx 
    pick ba5a91a3 id: xxx  cause: xxx  solution: xxx 
    pick 82911374 id: xxx  cause: xxx  solution: xxx 
    pick b06e264b id: xxx  cause: xxx  solution: xxx 
    

    这里,我要修改倒数第四次的commit信息,
    因此将以上出现信息的第一行中的pick改为edit。然后保存退出。
    这时,通过git log,可以发现最后一次commit已经变成之前的倒数第四个了。
    再使用:

    git commit --amend
    

    来对commit信息进行修改。
    修改完成之后,怎么回到当初呢?
    使用:

    git rebase --continue
    

    搞定。

    相关文章

      网友评论

          本文标题:git 知识点

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