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

原文地址:https://www.cnblogs.com/fogwizard/p/12090492.html