#git是什么
Git可以说是最好用的,而且是最方便的分布式版本控制系统(如果你要是永远保持在网络畅通的情况下,当我没说这个说)
工作原理/流程:
可以分为四个区:
Workspace : 工作区
Index / Stage : 暂存区
Repository : 仓库区(或者本地仓库)
Remote : 远程仓库
为什么选择git
git首先是 分布式版本控制系统,每个人都的电脑就是一个完整的版本库,这样,也可以在没网的情况下,去完成工作,如果多人,互相pull 就可以看到对比和修改的对比的地方。
无论windows还是linux都是傻瓜式的安装,在这里而且网上也有想关的教程。所以在这就不说明了
关键的如何操作
建议在bash的情况下,还有尽可能先看看git 的help 去查看命令
-
首先要为这台机器的所有git仓库设置用户名和邮箱(下面我是因为已经设置过了)
-
创建版本库
版本库–其实就是你的项目名的文件夹,在这个文件夹里面,git可以跟踪任何文件并且是任何时间,最重要的还可以"还原"
我是因为在文件夹里面直接右键打开的bash,,所以很方便不是吗
这时候,在这个文件夹,就会出现一个隐藏的.git文件夹,这个就是init后成功的证明,这个尽量不要动。
(1) 首先添加这个文件夹的文件。或者使用 . 直接添加所有文件。
(2) 在第一步完成时候,你只是添加了,但是没有提交到本地仓库,你必须要 “commit” 下,提交到仓库
(3) 当你完成第二步后,,然后用git status 可以判断自己是否已经commit成功。绿色代表成功,红色代表没有添加
(4) 在这里,版本控制只能看到文件的变化,不能检测到图片或视屏的变化,只能判断出来大小。
(5) 如果你改到某个文件可以查看下这个文件到底改动了什么
在提交的时候,记得查看状态,养成好的习惯,可以给自己方便很多,
[] -
版本回退
如果你想回退你刚才的内容,你放心,这个是可以解决的。
[^2]我这里已经做好多种修改
可以看到最后一次添加的内容和上一次添加的内容。。
如果你不想让现实这么多的内容可以命令 git log -pretty=oneline
(1) 版本回退使用;
第一种是 : git reset --hard HEAD^ 回退上个版本 。
第二种是: git reset --hard HEAD-100,用数字表示版本,进行回退版本。
如果你忘记了你想回复的版本号,需要查看版本号: git reflog
-
理解工作区和暂存区的区别
(1) 工作区:就是你在电脑看到的目录,或者你后面改变的任何东西。
(2) .git 这个是另外的,这就是版本库,其中重要的是stage(暂存区),还有创建的第一个分支master 以及指针HEAD
在工作区和暂存区上面其实已经提到过了,就简单就是git status 那个是红色的和绿色的,绿色的就是在暂存区了 -
GIt 撤销修改和删除文件操作
(1) 撤销修改如果你提交的内容发现有问题,你可以做下面的操作进行撤销 1.直接在文件更改然后commit 2.就是恢复上一个版本 3.就是撤销工作区的修改了:git checkout --file (这些可以自己尝试了,会更加记得牢固)
git checkout --file 如果不加-- 命令就是创建分支的命令了
(2)删除文件
直接使用rm 加文件名就可以删除
或者在工作区删除然后commit
远程仓库
上传项目到github 一共有两种方法,
1.一种是利用ssh key 进行连接,这种方法是很安全的,
2.第二种方法是http就是,虽然这种方法不安全是,但是非常的方便。
这个自己选择
ssh key连接
1.首先创建ssh key:
(如果你用户主目录有.ssh 这个目录就可以跳过这步了)
ssh-keygen -t rsa –C “youremail@example.com
2.然后再github加入自己的电脑的私钥。
记得在这里选在ssh密钥就行了
3.现在github已经弄好了,,然后再git上面创建一个新的仓库,然后复制那个仓库的ssh密钥就行了。
4.如果上面都已经成功了 ,那么在本地的仓库就行
git remote add origin ssh密钥
5.然后你就可以进行最终的一步了就是push项目到github了。
git push -u origin master
把本地仓库分支master内容推送到元仓库去
第一次要加上u是让本地的master分支与远程的master关联起来
然后你就可以进行日常push了,
HTTP方式下push项目
这个对于上面那个方法是很简单的,只需要复制http的网址
然后 就可以执行这个命令了,直接就可以上穿项目了
从远程库克隆
ssh clone
- 如果你已经在github上已经好的仓库,方法还是像上面的方法一样,只是命令不一样而已。
- 如果你电脑没有ssh的话,,必须要先在github加上你的电脑的私钥,
http clone
- 如果是http,就不必了第二步的操作可以直接就可以clone
分支的管理
最重要的分布式管理,就是git里面的每次提交都是串成一条时间先,这个时间先就是一个分支。如果是新建的仓库,都只是有一条分支也是主分支。
HEAD可以说是不是指向提交,而是指向master
-
创建分支
git checkout 命令加上-b 表示创建并切换,所以,你就发现你的上面显示文件夹的位置后面的蓝色字变了色。 -
如果想要切换分支
git的分支都是分开处理,互不干涉,所以你在这个分支改变的东西,是不会再另外一个分支显示出来的 -
能分一个分支,当然可以合并分支
-
分支完之后,如果不想要那个分支可以删除
总结创建和合并分支命令如下:
1. 查看分支 :git branch
2.创建分支: git branch name
3.切换分支 : git checkout name
4.创建+切换分支: git checkout -b name
5.合并某分支到当前分支:git merge name
6.删除分支: git branch -d name -
如果你是多人来处理一个项目就回存在一个问题, 如果多人处理同一个文件,就会出现冲突。那么冲突怎么办。
(1) 先用cat查看文件的修改情况,判断哪些内容是自己需要的Git用<<<<<<<,=======,>>>>>>>标记出不同分支的内容,其中<<<head是指主分支修改的内容,>>>>>fenzhi1 是指fenzhi1上修改的内容,我们可以修改下如下后保存:</head是指主分支修改的内容,>
-
分支管理策略;
上面的合并分支是快速合并,就是不保留任何信息,用git log 都看不到版本的信息。
但是 带参数 -no-ff 来禁用"Fast forward"模式,就可以保留分支的信息
分支的策略就是:首先master主分支是稳定了,所以这个是不能改变的,而干活实在新建的分支上改变的,等分支修改完毕后,才会合并主分支
bug分支
碰到问题,首先是应该在主分支创建一个分支来修复他,但是时间不够了,git可以将当前工作现场“隐藏起来”。
git stash 命令
下面的步骤都是上面合起来的,创建分支,在分支上面修复bug,然后与主分支合并,删除临时分支
–上面提到的工作现场不是已经隐藏了,有两种方法可以恢复:
1.git stash apply 恢复 或者 git stash drop删除
2.一种是 git stash pop ,恢复的同时,删除stash内容
多人协作
-
要查看远程库的信息,使用 git remote
-
查看远程库的详细信息 使用 git remote -v
(我这里没有空的库,就不截图了) -
推送分支
什么情况,要分支推送,1.是master分支是主分支,要与远程同步2. 一些bug修复,不需要推送到远程,合并到主分支,然后推送master -
抓取分支
多人协作时,大家都会向主分支进行推送各自的修改,
git checkout -b dev origin/dev
创建远程的origin的dev分支到本地来
当你改完后,
这会就是一个问题,,你推送不上去文件,因为已经有另外一个改动了,,所以你必须要先用git pull 把最新的提交 抓下来,然后在本地合并,解决冲突再推送,这样就会成功了