zoukankan      html  css  js  c++  java
  • git命令备忘

    git命令有千千万,每一个命令又可以带参数,时间久了就容易忘记,那怎么办呢?答案自然

    按功能记忆,记住关键的,其他命令随用随查,那哪些常用呢,让我们从头建一个仓库开始:

    (1)新建一个仓库:

         git init .

             解释: 在当前目录下初始化一个仓库,此操作会在当前目录下生成一个.git目录

    (2)往仓库加入文件:

             git add  README

             解释: 将README这个文件加入仓库进行管理

     (3)查看仓库状态:

             git status

    命令返回:

    git status .
    On branch master

    Initial commit

    Changes to be committed:
    (use "git rm --cached <file>..." to unstage)

    new file: README

     (4)提交:

           git commit -m "Add file README"

            解释: 将之前的修改生成一个提交,仅仅是生成一个提交,不会推到远程的服务器,要推送需要使用git push命令

     (5)追加提交

               在(4)的基础上,如果又加了其他修改,此时如果不想生成新的提交,可以在追加提交,命令如下:

              git add README      先add在commit

              git commit --amend

     (6)查看提交记录

              git log

           解释: 查看之前的提交记录

    (7)增加远程仓库:

            git remote add origin https://gitee.com/xboot/xboot

            解释: 增加一个remote,因为我们是自己新建的git仓库,默认是没有remote的,如果是git clone别人的仓库,默认会自己加上remote。

    (8)推送到远程仓库:

           git push origin HEAD:refs/heads/master

          解释: 将当前的HEAD推到origin指定的地址上,根据上文,origin是指:https://gitee.com/xboot/xboot

          同理,我们可以不用增加remote而直接使用地址推送: git push https://gitee.com/xboot/xboot HEAD:refs/heads/master

          可见,origin只是方便使用的一个代号而已,为方便还是需要加origin

    (9)版本回退:

        git reset e86c433e2c416984211642fb46a1ca98a69c74a4 --hard

        解释: 上面的e86c433e2c416984211642fb46a1ca98a69c74a4是commit ID,想回退到哪里就输入对应的ID号,ID号如何查看呢? 请看上文的git log命令

    (10)回退好了只后,我想回到回退之前的状态:

          先git reflog查看ID号,再用git reset id --hard执行切换

    (11)我想生成一个补丁发给在现场的同事,如何做?

          git format-patch -1

          生成3个补丁呢?

          git format-patch -3

          解释: 执行完了之后会在当前目录生成补丁。

    (12)我是那个在现场的同事,收到大神alice发来的补丁,该如何打补丁呢?

          git am file.patch

          解释: file.patch是alice从上海发来的补丁。

     (13)哎呀,我在现场收到补丁,但是我本地的版本不是最新的跟上海的alice的base不一致,换句话说我的代码太旧了,补丁打不上去,怎么办?

               解决办法有多种:

               a.让上海的alice通过git reset id --hard (参考上文第9点)切换到现场的版本,重新生成补丁(参考上文第11点)再发过来。 

               b.我本地先更新到于alice一致的最新版本,然后打上补丁,此时不会有任何冲突。

     (14)好烦啊,alice好不容易修复了bug,给补丁到现场,还要求提供她指定版本的补丁,又当爹又当妈,吐槽归吐槽,活还是得干啊:

                先回退到现场版本:

                         git reset e86c433e2c416984211642fb46a1ca98a69c74a4 --hard

                然后  git am file.patch,此时一定提示有冲突,没关系,用文本编辑器打开补丁file.patch,照着补丁的内容手工修改代码,改好后

                运行: git add .        (参考第2点)

                            git am --resolved    (新命令,类似新媳妇)

                            git format-patch -1   (参考第11点)

                然后将生成的补丁发出去即可,上一个步骤明知道git am 会失败,为啥还要执行呢,是因为补丁里面已经有commit信息和ID了,

                解决好冲突后git am --resolved就可以把补丁里面的commit信息打上去了,不需要再次commit。那如果我手动直接修改解决冲突,

                 然后git add然后git commit -m "some thing change"这样可行吗? 可以,但是会丢失原始补丁里面的邮箱和作者用户信息,保留

                这些也是尊重作者的劳动成果体现。

    熟悉以上命令,基本可以正常在公司使用git了,如果这些还不够怎么办呢? 后面遇到再补上呗。

    (15)膝盖中了一剑,被问到分支是怎么回事?上文为何只字不提?别急,请注意上文的:

               git push origin HEAD:refs/heads/master

               解释: origin前面已经解释是个url, HEAD呢? HEAD是个别名代表最新的commit ID,

                         :refs/heads/先理解为固定格式,先不深究,也不需要深究,关键点在master,这个

                         远程的分支名,master是默认分支,那如果不推到master可以吗? 当然可以,我

                         经常这样使用:

                         git push origin HEAD:refs/heads/dev     (dev是开发分支,注意远程不需要存在dev分支,直接推,远程没有dev回自动新建)

    (16)谈到分支,不得不说如下命令:

                git branch  (查看本地分支)

                git branch -r (查看远程分支,注意上文的dev分支git branch 是查看不到的需要用本命令,因为dev是远程分支)

              

    (17)假设我在master分支上,dev分支有个问题需要我处理,改如何切换?

                        git reset origin/dev --hard

                 处理好了怎么切换回master分支?

                        git reset origin/master --hard

  • 相关阅读:
    点赞功能实现 $(tag).css('属性', '样式')
    ul li的添加 删除 复制 clone()
    Java 面向对象之构造函数和 this 关键字
    Java 面向对象编程介绍
    Java 语言基础之数组应用
    Java 语言基础之数组常见操作
    Java 语言基础之数组(一)
    Java 语言基础之函数
    Java 语言基础之语句
    Java 语言基础之运算符
  • 原文地址:https://www.cnblogs.com/fogwizard/p/12090492.html
Copyright © 2011-2022 走看看