参考: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