• GIT的基本使用


    参考:https://www.cnblogs.com/tugenhua0707/p/4050072.html

    GIT的架构:

    我们先来理解下 Git 工作区、暂存区和版本库概念:

    • 工作区:就是你在电脑里能看到的目录。
    • 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,所以我们把暂存区有时也叫作索引(index)。
    • 版本库:工作区有一个隐藏目录 .git,这个不算工作区,而是 Git 的版本库。

    下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

    • 图中左侧为工作区,右侧为版本库。在版本库中标记为 "index" 的区域是暂存区(stage/index),标记为 "master" 的是 master 分支所代表的目录树。

    • 图中我们可以看出此时 "HEAD" 实际是指向 master 分支的一个"游标"。所以图示的命令中出现 HEAD 的地方可以用 master 来替换。

    • 图中的 objects 标识的区域为 Git 的对象库,实际位于 ".git/objects" 目录下,里面包含了创建的各种对象及内容。

    • 当对工作区修改(或新增)的文件执行 git add 命令时,暂存区的目录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。

    • 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。

    • 当执行 git reset HEAD 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。

    • 当执行 git rm --cached <file> 命令时,会直接从暂存区删除文件,工作区则不做出改变。

    • 当执行 git checkout . 或者 git checkout -- <file> 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区中的改动。

    • 当执行 git checkout HEAD . 或者 git checkout HEAD <file> 命令时,会用 HEAD 指向的 master 分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

      1 1.克隆远程仓库到本地:git clone 仓库地址
      2 
      3 2.git add . :将此目录下的代码从工作区添加到暂存区
      4 
      5 3.git commit -m "提交":将暂存区的代码提交到本地仓库
      6 
      7 4.将本地代码推送到远程仓库:git push
      8 
      9 5.查看工作区代码相对于暂存区的差别:git status
     10 
     11 6.创建分支:git branch 分支名
     12 
     13 7.创建一个新分支并切换:git checkout -b 分支名
     14 
     15 8.切换分支:git checkout 分支名(切换到master分支:git checkout master)
     16 
     17 9.查看本地分支:git branch (所在分支会有*标记)
     18 
     19 10.查看本地以及远程分支:git branch -a
     20 
     21 11.在master分支上合并代码:git merge 分支名
     22 
     23 12.删除分支:git branch -d 分支名
     24 
     25 13.强制删除:git branch -D 分支名(如果分支在本地和远程,那么本地删除后需要push,才能删除远程分支)
     26 
     27 14.撤销上次提交到缓存区的代码:git reset HEAD 文件名
     28 
     29 15.拉取远程所有分支:git fetch
     30 
     31 16.回退到指定版本:git reset --hard commit ID(git relog 中查询到的commit ID前7位,或者git log中查询到的commit ID)
     32 
     33 git log 和git relog的区别:git log 命令可以显示所有提交过的版本信息
     34 
     35            git relog:可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)
     36 
     37 17.回退1个版本:git reset --hard HEAD 
     38 
     39 18.解决冲突:a. git stash(将本地修改后的代码放到暂存区)
     40 
     41        b.git pull(拉取远程分支内容)
     42 
     43        c.git stash apply 暂存区ID(拿出暂存区的内容)
     44 
     45        d.出现冲突并解决:vim 冲突的文件,删除(快捷键DD),退出保存
     46 
     47        e.git add .
     48 
     49        f.git commit -m "解决冲突"
     50 
     51        g.git push       
     52 
     53 查看暂存区内容:git stash list
     54 
     55 拿出暂存区的内容并删除:git stash pop
     56 
     57 删除指定暂存:git stash drop 暂存区ID
     58 
     59 清空暂存:git stash clear
     60 
     61 查看暂存区缓存的内容:git stash show
     62 
     63 详细查看暂存区缓存的内容:git stash show -p
     64 
     65 从暂存区新建分支:git stash branch 分支名(此时暂存区的内容会被丢弃)
     66 
     67 19.比较文件:
     68 
     69 git diff 文件名(直接比较工作目录下的此文件和暂存区文件的不同内容)
     70 
     71 git diff --cached 文件名(比较暂存区和远程仓库)
     72 
     73 git diff commitID 文件名(比较工作目录和远程仓库)
     74 
     75 20.创建标签:
     76 
     77 git tag -a v1 -m "v1 version online"
     78 
     79 查看标签:git tag
     80 
     81 查看标签里的具体内容:git show v1
     82 
     83 推送所有标签:git push origin --tags
     84 
     85 推送指定标签:git push origin v1
     86 
     87 删除标签:git tag -d v1
     88 
     89 远程删除标签:git push origin --tags
     90 
     91 21. .gitignore文件的配置与解释:
     92 
     93 #注释
     94 
     95 #代表忽略所有.aa结尾的文件
     96 
     97 *.aa
     98 
     99 *.log
    100 
    101 #代表忽略.idea文件夹
    102 
    103 .idea/
    104 
    105 #代表忽略根目录下的ignore文件
    106 
    107 /.ignore
    108 
    109 #代表忽略document/下的任何以.txt结尾的文件
    110 
    111 document/*.txt
    112 
    113 #会忽略document文件夹下所有的以.txt结尾的文件
    114 
    115 document/**/*.txt
    116 
    117 #表示忽略/dd ,aa/dd的文件
    118 
    119 **/dd
    120 
    121 #忽略制定文件
    122 
    123 filename
    124 
    125 #不忽略document文件夹下的filename文件
    126 
    127 !/document/filename
  • 相关阅读:
    GitHub 和 Gitee 开源免费 10 个超赞后台管理面板,看完惊呆了!
    LeetCode234.回文链表
    LeetCode104.二叉树的最大深度
    LeetCode142.环形链表II(链表中环的入口节点)
    云原生动态周刊:你订阅 GitHub README 播客了吗?
    云原生爱好者周刊:Crossplane 成为 CNCF 孵化项目
    凌晨 12 点突发 istio 生产事故!一顿操作猛如虎解决了
    新东方在有状态服务 In K8s 的实践
    面向无人驾驶 “云端大脑” 可用性的云原生实践
    Qunar 云原生容器化落地实践
  • 原文地址:https://www.cnblogs.com/pengpenghuhu/p/15628346.html
Copyright © 2020-2023  润新知