zoukankan      html  css  js  c++  java
  • 玩转GIT

    git tag

    https://git-scm.com/book/zh/v1/Git-%E5%9F%BA%E7%A1%80-%E6%89%93%E6%A0%87%E7%AD%BE

    git tag:查看所有tag

    git tag -l 'v2.1.2.20170111.*'

    git tag xx:打tag

    git show v2.1.2.20170111.3.bgy

    git push origin v2.1.2.20170111.3.bgy: 提交tag

    git push origin --tags   要一次推送所有本地新增的标签上去 

    checkout到某个tag:

    先 git clone 整个仓库,然后 git checkout tag_name 就可以取得 tag 对应的代码了。

    但是这时候 git 可能会提示你当前处于一个“detached HEAD" 状态,因为 tag 相当于是一个快照,是不能更改它的代码的,如果要在 tag 代码的基础上做修改,你需要一个分支:

    git checkout -b branch_name tag_name

    这样会从 tag 创建一个分支,然后就和普通的 git 操作一样了。


    git reset/revert 撤销

    http://yijiebuyi.com/blog/8f985d539566d0bf3b804df6be4e0c90.html

    http://gitbook.liuhui998.com/4_9.html

    http://blog.jobbole.com/87700/

    git revert 撤销某一个commit
    git revert是用一次新的commit来回滚之前的commit
    git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61

    通常,前几位即可 git revert c011eb3

    git reset 回退代码到指定状态

    --mixed  未add的时候

    会保留源码,只是将git commit和index 信息回退到了某个版本.

    git reset 默认是 --mixed 模式 
    git reset --mixed  等价于  git reset

    --soft    add之后

    保留源码,只回退到commit 信息到某个版本.不涉及index的回退,如果还需要提交,直接commit即可.

    --hard  撤销commit和add操作

    源码也会回退到某个版本,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)

    特殊场景:当用reset 恢复了远端代码,其他人pull更新本地代码,根本不能感知线上的回退。

    解决:执行git reset --hard origin/release/1.2.2,把本地代码强制更新为远程的1.2.2分支最新的状态;

    reset远程仓库代码之后没有多出来commit,此时执行pull感受不到远端比本地多出来的变化(没有新的commit),所以不会把远端代码更新到本地;

    revert则会产生新的反向commit;

    恢复某个文件:

    git checkout -- hello.rb

    这条命令把hello.rb从HEAD中签出并且把它恢复成未修改时的样子.

    远程代码覆盖本地

    解决方法:

    1、如果还没有 commit 的话,可以用

    git checkout .
    

    这样将使所有代码还原到最后一次 commit 的状态

    2、如果已经 commit 了,最简单的方法就是,删除当前的工程(注意保存有用的代码到别的地方)
    然后使用

    git clone https:// ....
    

    重新 clone 远程工程到本地

    或者

    git fetch --all git reset --hard origin/master

    git reset --mixed HEAD 将你当前的改动从缓存区中移除,但是这些改动还留在工作目录中。
    另一方面,如果你想完全舍弃你没有提交的改动,你可以使用git reset --hard HEAD。这是git reset最常用的两种用法

    git pull 的意思并不是覆盖,而是和远程做一次比对,如果远程代码比本地的新,就把本地代码调整到远程代码最后一次 commit 的状态。而针对问题中的情况,本地代码比远程的新,所以 git pull 不会有任何作用。

    版本恢复

    版本恢复,本地和远程都恢复到历史提交版本commitid:

    git reset -hard 6292d98 #本地恢复到指定版本,git reset --hard HEAD是恢复到最近提交 

    本地分支强行覆盖远程分支

    git push origin master -f #强制用本地分支更新远程分支

    http://www.tech126.com/git-reset/#comment-8055下面的评论

    删除远程分支

    http://zengrong.net/post/1746.htm

    git删除远程分支:

    如果不再需要某个远程分支了,比如搞定了某个特性并把它合并进了远程的 master 分支(或任何其他存放稳定代码的分支),可以用这个非常无厘头的语法来删除它:

    git push [远程名] :[分支名]。如果想在服务器上删除 serverfix 分支,运行下面的命令:

    $ git push origin :serverfix To git@github.com:schacon/simplegit.git - [deleted] serverfix

    咚!服务器上的分支没了。你最好特别留心这一页,因为你一定会用到那个命令,而且你很可能会忘掉它的语法。

    有种方便记忆这条命令的方法:记住我们不久前见过的 git push [远程名] [本地分支]:[远程分支] 语法,如果省略 [本地分支],那就等于是在说“在这里提取空白然后把它变成[远程分支]”。

    git push origin :old_master #master没法删,只能删其他分支,所以这个方法不能用于上面的master分支回滚版本。

    http://my.oschina.net/tsingxu/blog/84601

    https://git-scm.com/book/zh/v1/Git-%E5%88%86%E6%94%AF-%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF#删除远程分支

    删除本地分支

    git branch -d <branchname>

    比较两个分支的不同

    git diff  branch_a..branch_b

    git自动补全功能

    https://i.cnblogs.com/EditPosts.aspx?postid=4422412

    按tab键自动补全命令

    locate git-completion.bash找到这个文件,在.bashrc中加入source pathto/git-completion.bash

    把这个文件复制到系统目录:

    $cp git/contrib/completion/git-completion.bash ~/.git-completion.bash

     在 .bashrc 中加入:重新进入terminal,或者直接手动执行下;

    source ~/.git-completion.bash
  • 相关阅读:
    【做题记录】区间排序—线段树
    【做题记录】CF1428E Carrots for Rabbits—堆的妙用
    线段树合并、分裂
    一、drf入门规范
    七、Django实战--图书管理系统搭建
    六、ORM模型层补充
    五、Django之模型层
    四、Django之模板层
    三、Django之视图层
    二、Django之路由层
  • 原文地址:https://www.cnblogs.com/peterpanzsy/p/4422412.html
Copyright © 2011-2022 走看看