1、git本地仓库原理流程图&详解
先明确几个概念:
工作区(Working Directory):就是当前文件所在的文件夹。就是gitTest
版本库(Repository):工作区有一个隐藏目录.git
,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master
,以及指向master
的一个指针叫HEAD
。
2、基础命令
配置:这个东西是配置本地仓库信息,如果上传到gtihub库中,那里就会显示对应的用户名和邮箱。
git config --global user.name 'admin'
git config --global user.email 'xxx@qq.com'
初始化本地仓库
git init
添加文件(修改文件内容后,需要重新添加),添加到工作区。
git add <file> //上传某一个文件
git add . //上传所有的文件
git add *.html //上传所有的html文件
查看状态:可以查看文件是否被修改,哪些文件已经add。
git status
提交到本地仓库(修改文件内容后,需要重新添加 git add),提交到版本库。
git commit
查看文件修改详情
git diff
git diff <flle>
3、回退命令
命令显示从最近到最远的提交日志
git log
git log --pretty=oneline
回退到提交的上一个版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
git reset --hard commit_id
回退到上一个版本,版本号没必要写全,前几位就可以了。
记录每一次的回退或者提交的命令,即使关闭电脑仍然可以查看commit_id版本号。主要用于回退。
git reflog
把xxx.txt
文件在工作区的修改全部撤销,命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令。
一种是readme.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit
或git add
时的状态。
git checkout -- xxx.txt
可以把暂存区的修改撤销掉(unstage),重新放回工作区
git reset HEAD <file>
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,git reset --hard commit_id,不过前提是没有推送到远程库。
4、删除文件
利用rm将文件删除后,但是在版本库中还有,这时如果想删除版本库中的文件。
git rm xxx.txt
git commit
如果是误删除,那么可以找回文件。因为这个文件在版本库中还有。回退
git checkout -- test.txt
删除git add上传的文件
git rm --cached <file>
5、操作远程仓库
发送到远程仓库
创建SSH Key,这个是用于连接远程仓库的密钥,可以在用户主目录里找到.ssh
目录,里面有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,不能泄露出去,id_rsa.pub
是公钥,可以放心地告诉任何人。然后配置github仓库。
ssh-keygen -t rsa -C "youremail@example.com"
删除当前库的地址
git remote remove origin
查看当前的仓库地址
git remote -v
将后面git@github.com:Zesystem/git.git改成自己的库就可以了
git remote add origin git@github.com:Zesystem/git.git
推送到仓库,这样就上传到github远程仓库了。
//第一次
git push -u origin master
//之后
git push origin master
从远程仓库克隆到本地
从远程数据库拉取数据
git pull
git pull --rebase origin master
刷新仓库
git pull --rebase origin master
从远程数据库拷贝数据
git clone https://github.com/Zesystem/git.git
6、忽略不想上传的文件
忽略不想上传的文件
1、首先在目录下创建一个叫.gitignore文件(无后缀名)
2、在文件中写入忽略上传的文件名称,例如文件写xxx.txt,文件夹写/dir
7、分支的使用
创建分支
git branch 分支名
创建分支并且进入分支
git checkout -b 分支名
查看所有分支
git branch
切换分支
git checkout 分支名
分支合并主线(回到主线)
git merge 分支名
8、解决冲突
(1)如果两个人在同时修改了本地仓库的同一个文件,git push时就会出现冲突,后提交的一个人就是提示冲突,提交失败。
解决的办法就是如下:编辑冲突文件,删除所有内容,添加上自己的内容就可以,然后add、commit、pull、push就可以了。这里面Git用<<<<<<<
,=======
,>>>>>>>
标记出不同用户(分支)提交的的内容。
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
Git tracks changes of files.
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
(2)不同分支(其实就是不同的人)之间也会产生冲突,在分支1提交到本地仓库,再在分支2提交到本地仓库,这里的前提是必须都是都一个文件。解决办法跟上面的一样。
3、对接远程仓库(github)
上传
git remote add origin git@github.com:Zesystem/test.git
git push -u origin master
下载拷贝
git clone git@github.com:Zesystem/test.git
拷贝分支:先拷贝整个分支,然后进入对应的分支。