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
原文地址:https://www.cnblogs.com/pengpenghuhu/p/15628346.html