[ Git笔记 | 青训营笔记 ]

127 阅读4分钟

这是我参与「第五届青训营 」笔记创作活动的第2天

前言:

最近项目开发要用到git,git学了太久有点忘了。本文主要用于温习知识,快速入手,要讨论具体细节,有时间再更新。再次感叹git编写设计的强大👍

一.总体概括

先上图

2.png 图片来源网络

新手先不管分支,先把总体搞清楚。

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拉取远程分支

具体使用场景可参考廖雪峰网站.

有空再补充😀


参考资料