一、文件分布
(working copy)工作区简单理解就是需要进行版本的某个文件夹(假设为test),这个文件夹有一些特殊之处——多了.git这个隐藏的文件夹
(stagging)暂存区可以理解为一个虚拟工作区,这个虚拟工作区会跟踪工作区的文件变化(增删改等操作)。这个工作区的位于.git文件夹下的index目录下。除非是绕过暂存区直接提交,否则Git想把修改提交上去,就必须将修改存入暂存区最后才能commit。每次提交的是暂存区所对应的文件快照。
(local repo)本地仓库test文件夹下的.git文件夹就是版本库
(remote repo)远端仓库这个是真·git仓库,你可以把它理解成上传到服务器上可以和别人共用的游戏存档
为什么会有暂存区?
会有这个疑惑的,请先问问自己,使用git时候是否都是所有的修改全部提交了,根本没有考虑到多个修改文件,是和多个功能有关,而每一个功能应该单独做成一次提交,这样可以保证提交历史的清晰。否则,当你想要回滚历史的时候,你会无所适从,根本分不清每个版本包含了哪些功能,修复了哪些bug.而暂存区的作用就是为了,可以选择提交,比如你在开发B功能的时候,发现A功能还存在Bug,这时候就需要先修复A中的Bug,然后先提交修复的A中的Bug,然后再提交B功能开发的文件。这样就可以提高提交版本历史记录的清晰,方便回滚。而提交是原子性操作,文件的选择就交于暂存区去做,每一次提交都是一个完整的功能开发,保证commit的干净,降低commit的粒度。
二、配置Git基本信息
配置全局Git的用户名和邮箱设置,之后每一次Git的提交都会使用这些信息,也可通过git config –list查询当前Git的配置
三、git三种状态
a.图片中的Unmodified 和Modified两个状态合并成一个状态,叫Unstaged。所以,三种状态分别是Untracked、Unstaged、Staged.。
b.第一种状态,Untracked,也就是说git压根就不知道这个文件,对应的中文就是未被追踪的状态;
c.第二个状态,Unstaged,文件以及添加到git仓库中,但是还没有提交,处于等待提交的状态;
d.第三种状态,Staged,到了Staged状态,意味着文件可以执行提交操作。
一旦执行了提交操作,文件就由Staged状态变成Unstaged状态。整个过程就是这样,三个状态形成环状。
1. Untracked状态
桌面创建一个空文件夹,当做我们的项目文件夹,然后cd到该文件夹的路径,
a.输入 git init命令回车,可以看到在项目文件夹下创建了一个.git的文件夹。这个步骤就是git仓库的初始化操作,就是告诉git我们的文件夹MyProject已经添加到了git仓库管理。
b.检查当前项目的文件状态 git status,当前显示没有提交记录
c.在项目文件下添加一个文件abc.txt后,再次检查文件状态 。这个时候文件的状态就是Untracked状态,此时此刻,git才知道这个仓库下出现了一个没有被管理的文件,会提醒你用 git add file 这个命令去把Untracked状态的文件添加到仓库管理范围,这样这个文件就可以被提交。
2 Unstaged状态
一般我们操作或者输入git 命令是在git bash中进行,如何打开git bash呢,找到桌面你的项目,例如testgit,右键这个项目,选择git bash here
a. 在git bash上查看仓库文件状态。
b. 使用 git add filename 把文件添加到仓库, 此时的abc.txt文件的状态就是Unmodifed,上面可以看到new file,所以是没有被修改的状态
c. 我们需要把这个文件的内容进行修改。这里,我们把abc.txt 里面的内容删除,然后随意输入一些字符,保存,然后在git bash查看文件状态。这个时候,文件abc.txt的状态就变成了Modified。Unmodified和Modified两种状态组成了Unstaged。
3. Staged状态
a.上面的图,我们看到abc.txt 显示红色的modified的状态,我们需要通过git add file 来把这个文件状态从modified改成Staged,任何文件到了Staged状态,就意味了可以执行提交命令。所以,git会提醒你, Changes to be committed,变成了可提交状态。git add .中这个点表示任何文件。
b. 在做commit命令之前,我们需要创建一个身份,就是告诉git这次提交是谁做的。因为可能存在重复的name,所以这里还需要设置email,一般来说email肯定不会有相同的。
c.我们开始用commit命令提交到仓库。上面的参数-m表示message,就是告诉别人,你这次提交的内容是什么,这个-m参数不是强制性的。提交完后,Staged状态又变成了Unstaged,如果有新的文件,就会变成Untracked状态,又开始三种状态之间切换。
https://www.jianshu.com/p/dbd79a5063ab
或者从Untracked file、Changes to be committed、Changes not staged for commit提示进行分析
分析参考:https://blog.csdn.net/u013050662/article/details/84897594
四、创建、合并分支
https://blog.csdn.net/qq_40415721/article/details/82351660
https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424
五、添加、克隆远程仓库
ssh只是关联客户端与远程仓库,
以下操作是关联项目(默认也是master)
git remote add origin git@github.com:YATBOBTB/myApp.git
https://blog.csdn.net/qq_40415721/article/details/82285542
六、解决冲突
产生:多个开发者同时使用或者操作git中的同一个文件,最后在依次提交和push的时候,第一个操作的是可以正常提交的,而之后的开发者想要执行pull(拉)和pull(push)操作的时候,就会报冲突异常conflict。
解决:保留自己修改的数据,同时保留别人的数据信息。即手动修改,再提交
https://www.cnblogs.com/gavincoder/p/9071959.html
七、工作中常用场景
https://mp.weixin.qq.com/s/ZBKKwy2fr1PSKP13LwQgrw
(3个场景)
更详细的命令看https://blog.csdn.net/qq_40415721/category_7971129.html