git的安装
由于我已经使用git将近有大半年的时间了,早已安装过,就没法上图说明,这里就不细说了
版本库(仓库Repo)相关
- 概念:版本库(仓库)其实就是一个由git管理的文件夹,你在该文件夹
中创建修改删除文件都有git监控 - 创建方法:
- 创建一个空的文件夹
$ mkdir testGit
- 查看文件夹中现在没有任何文件
$ ls -a testGit
- 把该文件夹转变成一个由git监管的文件夹:
$testGit git init
- 此时在查看该文件夹中就会有一个
.git
文件夹,说明此刻该文件夹就开始由git跟踪监控了
- 对仓库内容修改:
向仓库中添加.gitignore文件
- .gitignore文件作用:其中写了那些文件不需要有git追踪监控,git可以完全不管这些文件,并且你也没办法把这些文件push的远端仓库
- .gitignore文件创建:在你的仓库中touch一个名字是.gitignore(千万不要忘记前面的. 这说明这个文件是一个隐藏文件不用ls -a是没办法看到的)
-
向.gitignore文件中写入你想忽略的文件:两个方法
1.在webstrom中安装.ignore插件,选中你写的项目类型自动添加内容到.gitignore文件中
mac的使用方法:
使用快捷建:ctrl + N :
在以下菜单中选中你的项目类型插件会自动为你添加.gitignore文件中的内容
举个例子:你向创建一个node项目
首先你得选中jetBrains
:因为我是用的是IDEA的编译器,而 jetBrains是生产IDEA各种编译器的公司,这些编译器在都会自动在你的项目中添加如同.idea这一类的文件,帮助你运行你的项目,选中后就会自动帮你在.gitignore文件中添加.idea这种文件
然后你要选中node
:因为我这是node项目
ps:我经常写js项目使用npm包管理器,其中有一个巨大的node-modules文件夹一定不能上传到git远端库中,因此必须有.gitignore文件中添加node-module让他被git忽略
仓库修改相关
你在本地的所有修改只要没有做过任何add.commit.push所有的内容现在都在
工作区
,git监管你现在工作区的操作,通过git status
可以查看工作区有哪些修改,现在红色字样的文件都是你在工作区的修改
发现.idea竟然也被git监管了,赶紧在.gitignore文件中添加.idea
-
这些修改通过
git add 文件路径/.
就可以被添加到暂存区
,一下绿色字样的文件就是已经添加到暂存区的文件
此时暂存区有两个文件
-
现在你就可以把暂存区中的所有内容作为一次commit一并添加入你当前分支生成一个commit节点
- 接着你好想把你的项目放到远端库中让很多人可以浏览
- 你得先将本地仓库和你的远端仓库关联,但是你远端的仓库并不知道想跟他关联的主机是不是被允许的,此时你需要在你使用的这台电脑上产生一个秘钥,标志你这台电脑,并且用这个秘钥在远端配置,这样远端仓库就可以允许你这台电脑对他进行操作啦
向远程库提交本地仓库中的代码
在你的远端github上创建一个新的Repo
-
选定SSh地址进行copy
ssh和http克隆区别
这两种方式的主要区别在于:使用https url克隆对初学者来说会比较方便,复制https url然后到git Bash里面直接用clone命令克隆到本地就好了,但是每次fetch和push代码都需要输入账号和密码,这也是https方式的麻烦之处。而使用SSH url克隆却需要在克隆之前先配置和添加好SSH key,因此,如果你想要使用SSH url克隆的话,你必须是这个项目的拥有者。否则你是无法添加SSH key的,另外ssh默认是每次fetch和push代码都不需要输入账号和密码,如果你想要每次都输入账号密码才能进行fetch和push也可以另外进行设置-
git remote add origin <你的远端仓库地址>
这是我想push代码,把本地仓库放到远端
-
第一次push需要设置好远程库的名字以及push的代码放到远程库的哪一个分支上 origin是远程库的默认仓库名字,因此第一次push需要写成如下样子
git remote -v
:查看你现在关联的远程仓库
git remote add origin(可以起别的名字是远程仓库名字) master(也可以识别的分支)
:吧当前的本地库关联到远端仓库,给远端仓库起名字是origin,并且在远端创建一个master分支把这一次push的所有commit全部按照时间顺序加到master分支上
git remote rm origin(可以是别的远程仓库)
:移除当前本地库关联的名字是origin的远程仓库(一个本地库可以关联多个远端仓库) 以后的每一次push可以直接
git push
就是把代码push到origin 的master分支上,或者使用git push origin master
每次push都设置好要push的位置
从远程库拉取
- 如果你看到一个很好的项目想拿下来
git clone <项目的http/ssh地址>
,如果你clone项目的github配过你这台电脑的秘钥,那么你可以采用ssh地址clone,这样你就具有修改代码并且push代码的权利,如果没有配过秘钥,你只能使用http地址clone,但是这种clone方式不能像远程仓库中push代码-
这是从我的仓库使用ssh方式clone代码
-
-
这是从别人的仓库使用ssh
-
从别人的仓库中使用http地址clone
- 如果此时你和别人一起开发,当你在写代码的时候,别人已经向仓库中提交了一次代码,这是master分支上多了一个节点,但是你本地却停留在上一个节点,这是你本地代码就跟远端代码不一样了,如果此时你push,git就会提醒你当前代码不是最新的,你要使用
git pull --reb
把远端代码拉下,和本地代码在工作区合并在一起 -
git pull
=git fetch
+git merge
:使用git fetch吧远端的origin master整个拿到本地,然后使用git merge
:把本地master上没有的节点+这次commit的节点合并解决冲突在本地成为一个新的commit节点,此时你可以push到远端 -
git pull --reb
=git fetch
+git rebase
:使用git fetch吧远端的origin master整个拿到本地,然后使用git rebase
:把远端有但是本地没有的节点先加到本地mater中,然后把这次的第一个commit节点加到master中如果有冲突解决冲突,然后在使用git rebase --continue
把下一个commit节点加进来在解决冲突,直到git rebase --continue
没有错误冲突,此时你就可以push代码了
版本回退相关
- 你工作区做了某些修改,这是你不想要工作取得修改了,你可以使用
git checkout <文件路径>
一旦checkout你的修改一定绝对完全找不回来了!!曾经写过好多代码你不小心checkout的我好辛酸!!
此时工作区的代码会被checkout到:
- 1.如果现在暂存区有没有commit的代码,那么回到暂存区状态
2.如果暂存区没有代码,回到最近的一次commit状态
-
新添加的文件是没办checkout掉的,你可以直接手动删除这个文件
-
git checkout
:你可一看到红色字样没有了
-
如果此时你把某些修改add后放进了暂存区,但是你不想要这些修改了,你可以使用
git reset HEAD <文件路径>
:从暂存区撤销这个文件的这次add,让这次修改回到工作区
-
撤销某次commit,你可以使用
git log
查看那次commit的号码,
然后直接使用git reset --hard <commit号码>
,HEAD
指针指向最近的一次commit,HEAD^
代表上一次commit,HEAD^^
上上次,因此你也可以采用git reset --hard HEAD^
:会退到上一次commit
撤销某次commit还可以使用
git reset --soft <commit Id>
,这种方式会使得你的回到上次commit但是把这次commit的内容放进stage中,就是出现绿色字样git reflog和git log
前者你可以看到你所有的commit(包含被reset掉的commit)并且是按照操作顺序排序的。后者你只能看到当前有的commit
评论相关
- 如果你想向别人的仓库提交一次
pull request
从github上fork别人的仓库,此时你的仓库中就会多一个你刚刚从别人仓库中拿过来的仓库】在你的远程仓库中
-
如果你想给别人的代码提交一个issue,进入到别人的仓库中点击new issue
写好提交即可
-
如果你想给某一次pull request评论
- 如果你想给某一次commit评论
-
你可以点开某一次commit然后会在你鼠标经过的的每一行有一个小加号
点击一个就可以评论了
分支相关
未完待续。。。
林老师教育我们讨论一个问题的时候不要没事拉分支,所以我就没怎么扩展以后遇到问题再慢慢补充吧~