这是我参与「第五届青训营 」笔记创作活动的第2天
前言:
最近项目开发要用到git,git学了太久有点忘了。本文主要用于温习知识,快速入手,要讨论具体细节,有时间再更新。再次感叹git编写设计的强大👍
一.总体概括
先上图
图片来源网络
新手先不管分支,先把总体搞清楚。
1.Repository
我们先在一个文件夹里面,把它作为我们的本地仓库,也就是版本库(Repository)。版本库里面所有文件都会被git所托管。不管是新建还是删除还是修改,git都会记录。但是,git只能监测文本文件,二进制文件(比如.exe)则不行。
2.worksapce
版本库会记录每次的版本,但是频繁的更改文件都要被记录那就太过冗余了。所以git有了工作区(worksapce)这个东西。对于每次修改,git可以检测到,但是它并不会记录在版本库里,它存在工作区。工作区就是我们能看见到的最新的文件情况。(每次修改完,文件它都是最新的)
3. index
工作区里的文件按要添加到index里面才能添加到版本库。git这样设计,其实很聪明。一个人送东西去仓库,一件一件地拿过去,如果丢失了,或者有改动,记录货物的信息将会变得十分庞大。但是如果按一车一车送过去,一车作为记录,比如这车a东西加了赠品,b东西丢了···,将省了许多麻烦,而且便于统计。index就是像车子这样的作用。当我们每次需要来回修改一些文件,它作为新的一次版本,提交到仓库里。index就是个计录工具,把你每一次想提交的改动记录下来。
4. remote
远程仓库。在网上托管自己的版本库,每一次版本,它和本地仓库一样都会同步。这样可以存档备份,但更重要的是便于协作。git作为项目管理工具,不仅是为了管理,更重要的是协同。git有了branch(分支)这个新东西,是个很不错的设计。
5.branch(分支)
我觉得这个算是git里面的难点之一。大家可以把分支看作动漫里的分身,每个分支拥有自己独立的仓库···,你的改变不会影响主分支文件的内容。有了这个特性,我们可以在master上开一个分支出来,把它修改小部分进行测试,完成会就可以合并到master上,不会影响到master分支。个人开发使用不多,多见于团队协作上。先把框架写好,创造主分支。接着每个人负责一部分内容,在主分支开分支出去,接着再合并到主分支上。
5.1版本冲突
既然开分支去修改开发,或多或少修改了文件。这时候要合并到master上,就会提示改动,这种称之为冲突。 每当分支要合并时,都会提示冲突,这是保护主分支的方法之一。解决冲突的方法就是选择保留哪一次修改了,你要保留master上的,还是保留分支上的。注意哈,master原来有的文件被修改才会有冲突,新添加的文件并不会报冲突。
分支还有其他功能,可以去廖雪峰官网学,那里写的不错.
二.操作方法
现在有了git gui或者GitHub Desktop等图形化界面进行git操作,直观好用。但是在linux上面,还得是用命令行来肝。
| 命令 | 功能 |
|---|---|
git init | 在当前目录创建版本库 |
git add <file> | 可反复多次使用,添加多个文件 |
git commit -m<message> | 提交文件进版本库 |
git log | 查看提交历史 |
git reflog | 查看命令历史 |
git reset --hard commit_id | 回退版本X |
git checkout -- file | 用版本库里的版本替换工作区的版本 |
git status | 查看工作区,改动是否未提交 |
git rm <file> | 删除工作目录中的文件,并把此次删除操作提交到了暂存区 |
git remote add origin git@server-name:path/repo-name.git | 关联一个远程库 |
git push -u origin master | 第一次推送master分支的所有内容 |
git branch | 查看分支 |
git branch <name> | 创建分支 |
git switch <name> | 切换分支 |
git checkout <name> | 切换分支 |
git diff | 查看不同分支的文件差异 |
git checkout -b <name> | 创建+切换分支 |
git switch -c <name> | 创建+切换分支 |
git merge <name> | 合并某分支到当前分支 |
git branch -d <name> | 删除分支 |
git branch -D <name> | 强行删除分支 |
git log --graph | 看到分支合并图 |
git stash | 可以把当前工作现场“储藏”起来 |
git stash pop | 删除stash |
git stash list | 查看stash内容了 |
git cherry-pick <commit> | 复制一个特定的提交到当前分支 |
git remote -v | 查看远程库信息 |
git push origin <branch-name> | 推送自己的修改 |
git pull | 拉取远程分支 |
具体使用场景可参考廖雪峰网站.
有空再补充😀