• git常用命令


    本文参考内容主要有:
    1. https://gitee.com/all-about-git gitee
    2. https://www.liaoxuefeng.com/wiki/896043488029600  来自廖雪峰老师的git教程


    一、在看命令之前先来了解下git的工作原理 / 流程:

    Workspace:工作区
    Index / Stage:暂存区
    Repository:仓库区(或本地仓库)
    Remote:远程仓库
    HEAD指向的版本就是当前版本;

    二、git配置相关

    1. 查看配置

      (1) 在当前项目下面查看的配置是 全局配置 + 当前项目配置 , 使用时优先使用前项目配置;

      $  git config --list

      (2) 查看全局配置

      $ git config --global --list

    2. 设置全局用户名和邮箱

      $ git config --global user.name "Your Name"

      $ git config --global user.email "email@example.com"

    注意:git config命令的--global参数,用了这个参数,表示你这台机器上所有的
    Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

    3. 配置单个仓库的用户名、邮箱,如果你不进行配置用户名和邮箱的话, 则会使用全局的。在当前项目下执行:

      $ git config  user.name "yourUserName"

      $ git config  user.email "github@xx.com"

    三、版本库的创建、提交等基本操作

     1. 创建版本库

        $ git init

    2. 将文件从工作区增加都index/stage(索引区/暂存区)

      (1) 不带参数多个文件用空格隔开

        $ git add [feile]

      (2) 注意其中小数点,这条命令可以探测到新增、修改、删除,比较常用;

      $ git add . 

      (3) 更新你已经跟踪的文件,其中u代表updata。如果添加了新文件,那么是不会主动跟踪的。

        $ git add -u .

      (4) git add -A .  包括了前两项

    注意:将修改的文件add到暂存区后但是没提交到本地仓库,这时我又修改了工作区的该文件,
    如果我需要将刚才修改的工作区的文件提交到本地仓库的话,那么我必须对该文件再次add到暂存区
    即:每次修改,如果不用git add到暂存区,那就不会加入到commit中。

      3. 将文件提交到本地版本库,其中-m后面输入的是本次提交的说明;

        git commit -m "注释信息"

     4.  将文件从暂存区移除,即从index/stage(暂存区)移除;

        (1) 移除某个文件,多个文件时用逗号隔开;

          $ git reset HEAD <file>

        (2) 移除暂存区的所有文件;

          $ git reset HEAD .

    注意:将修改的文件add到暂存区后但是没提交到本地仓库,这时我又修改了工作区的该文件,
    如果我需要将刚才修改的工作区的文件提交到本地仓库的话,那么我必须对该文件再次add到暂存区
    即:每次修改,如果不用git add到暂存区,那就不会加入到commit中。

    四、git提交历史的查看

       1. 查看提交历史,显示从最近到最远的提交日志

          $ git log    

            commit 98bf5780459729112ff2c1a9f3bc420f3f9f84ea (HEAD -> master)
            Author: “这里是显示的是提交人信息
            Date: Sun Jun 7 18:31:25 2020 +0800  

    解读:其中98bf5780459729112ff2c1a9f3bc420f3f9f84ea,是commit的版本号,和SVN不一样,Git的commit id
    不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示,而且你看到
    的commit id和我的肯定不一样,以你自己的为准。为什么commit id需要用这么一大串数字表示呢?因为
    Git是分布式的版本控制系统,后面我们还要研究多人在同一个版本库里工作,如果大家都用1,2,3……作
    为版本号,那肯定就冲突了。每提交一个新版本,实际上Git就会把它们自动串成一条时间线。如果使用可
    视化工具查看Git历史,就可以更清楚地看到提交历史的时间线。

        2. 如果嫌输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:

         $ git log --pretty=oneline

       3. 带参数的git log也可以看到分支的合并情况:(git log --graph命令可以看到分支合并图)

    $ git log --graph --pretty=oneline --abbrev-commit
    * cf810e4 (HEAD -> master) conflict fixed
    | 
    | * 14096d0 (feature1) AND simple
    * | 5dc6824 & simple
    |/ 
    * b17d20e branch test
    * d46f35e (origin/master) remove test.txt
    * b84166e add test.txt
    * 519219b git tracks changes
    * e43a48b understand how stage works
    * 1094adb append GPL
    * e475afc add distributed
    * eaadf4e wrote a readme file

       4. 查看命令历史

         $ git reflog

    五、git差异化比较

      1. 暂存区和工作区的比较

        $ git diff 

        注意:比较的是当前分支的内容,输出的内容和参考博客:https://blog.csdn.net/weixin_37909391/article/details/84641899.

      2. 比较暂存区和最近一次commit的差异

        $ git diff --cached [file] 或者 git diff --staged [file]

      3. 显示工作区与当前分支最新commit之间的差异

        $ git diff HEAD

      4. 显示两次提交之间的差异

        $ git diff [first-branch]...[second-branch]

      5. 查看工作区与本地远程仓库副本的差异,注意比较内容是以本地工作区为基准

        $ git diff FETCH_HEAD

      6. 显示今天你写了多少行代码

        $ git diff --shortstat "@{0 day ago}"

    六、 git reset、git revert 相关的使用

      1.  $ git reset HEAD [file]

        回退到当前版本,我的理解就是去除掉添加到暂存区的内容,因此git reset HEAD
        操作只对暂存区起效果,多文件时可以$ git reset HEAD .(注意有个小数点)。可以参考三、4。

      2. git reset commitNo(提交版本号)

        回退到指定的版本号,这两个不加soft默认为soft,只是操作了暂存区(本地暂存区?),不影响工作区的;

        (1) 回退到上一版本

          $ git reset [--soft] HEAD^

      3. git reset --hard commitNo

        版本回退,直接把工作区的内容也修改了,慎用。需要注意的是使用版本回退后,git log是看不出
        你回退到版本号之前的记录的,但你可以使用git reflog查看命令历史。

        (1) 回退到最近一次提交

          $ git reset --hard HEAD^

      4. git revert commitNo

       这条命令会把指定的提交的所有修改回滚,并同时生成一个新的提交。

    七、git checkout 的使用  $ git checkout -- file,文件在工作区的修改全部撤销,注意其中的 -- 很重要,没有 --,就变成了"切换到另一个分支"的命令;

      场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,
        用命令git checkout -- file。
      场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命
        令git reset HEAD <file>,就回到了场景1,第二步按场景1操作。
      场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,可参考版本回退,不过前提是没有推
        送到远程库。

    八、远程仓库的关联、推送

      1. 本地仓库与远程仓库关联,即关联一个远程库;

        $ git remote add origin git@github.com:git用户名/远程仓库地址(或者使用ssh方式)
      2. 向远程推送分支内容
        $ git push -u origin master

    注意:由于第一次的时候远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支
    内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉
    取时就可以简化命令,直接使用 git push就行了。
    3. 从远程仓库克隆

      $ git clone git@github.com:michaelliao/gitskills.git

    九、分支管理
      1. 创建分支
        $ git branch newBranch,创建一个新分支newBranch
        $ git checkout -b newBranch,创建并切换到分支newBranch
        $ git switch -c newBranch,创建并切换到分支newBranch,这是个比较新的用法;
      2.  本地分支和远程分支建立关系,最好本地分支和远程分支名称保持一致,如下;

        方式1:在本地创建和远程分支对应的分支:

        $ git checkout -b branch-name origin/branch-name

       方式2:建立本地分支和远程分支的关联:
        $ git branch --set-upstream-to=origin/remoteBranch【远程分支名称】 remoteBranch【本地分支名称】
      3. 查看分支
        (1) git branch命令会列出本地仓库所有分支,当前分支前面会标一个*号,如下显示三个分支

      $ git branch,
         demo
         master
         * remoteBranch

        (2) 查看所有分支,包括本地分支和远程分支

         $ git branch -a
      4. 切换分支
       $ git checkout branchName,切换到分支branchName,注意撤销修改是git checkout -- file
       $ git switch branchName,切换到分支branchName
      5. 合并分支
        (1)$ git merge <branchName>,合并指定分支(branchName)到当前分支;
        (2)合并分支的模式:Fast forward,no-ff,squash,rebase详情见:

          git merge和git merge --no-ff的区别

        如:$ git merge --no-ff -m "描述内容" branchName;关闭fast-forward模式
      6. 删除分支
        $ git branch -d branchName,删除分支;
        $ git branch -D branchName,强制删除分支;

       7. 修改分支名称

        $ git branch -m oldName newName;

    git命令:
    1. cherry-pick命令,让我们能复制一个特定的提交到当前分支:
    常见问题:
    1. git pull 时Please enter a commit message to explain why this
    译文:请输入提交消息来解释为什么这种合并是必要的
    解决方式:
    git 在pull或者合并分支的时候有时会遇到这个界面。可以不管(直接下面3,4步),如果要输入解释的话就需要:
    (1).按键盘字母 i 进入insert模式;
    (2).修改最上面那行黄色合并信息,可以不修改;
    (3).按键盘左上角"Esc";
    (4).输入":wq",注意是冒号 + wq,按回车键即可.

  • 相关阅读:
    分治法(待整理)
    NP完全问题
    合并排序
    插入排序
    算法基础知识(算法导论)
    分支定界法
    RUCM简介
    大一编程基础培训]==06课==Python的字符串和编码
    python加密包利用pycrypto包进行AES、DES、MD5等加密
    pyecharts模块
  • 原文地址:https://www.cnblogs.com/damoblog/p/13063053.html
Copyright © 2020-2023  润新知