git是个好东西,日常开发、工作都要基于它,所以花了时间重新过了遍。东西太多,慢慢更新吧~这里会用自己的理解和描述来重新解释概念和流程,可能会与官方定义有不同,具体可查文后附学习资料
1.添加公钥
不管使用github还是bitbucket,或者自己的git服务器。那么都需要添加公钥到服务器,不然使用https协议每次push、pull都要输入密码,会累死的…
本地电脑,git窗口输入,一直点下一步就好。:
ssh-keygen -t rsa -C "your_email@youremail.com"
打印这个公钥,然后复制到github等,一般都是seeting里面有add ssh key类似页面。
cd ~/.ssh
cat id_rsa.pub
2.一般流程
一般第一次的话,需要将项目克隆到本地:
git clone url
原理提示:
git有3个区:工作区,暂存区,git仓库。工作区:就是本地的目录文件,我们在电脑文件夹里看到的,我们工作时会增删改文件;
暂存区:就类似虚拟机的快照,会把工作区某文件做一个快照,保存于此;
仓库:真实的一次commit提交,可看做一次完整的保存暂存区 里改动,有唯一标示,这个提交稍后我们会推送到远程,其他人就能看见了。
首先,查看当前更改了哪些文件(搞清楚工作区里我们做了啥呀):
git status
可以看改动了啥东西:
git diff
然后选择某个改动的文件保存到暂存区(假设我们新添加了hello.java这个文件):
git add hello.java
突然发现hello.java 文件先并不想提交,需要从暂存区把快照删掉:
git reset HEAD hello.java
选择world.java保存到暂存区:
git add world.java
提交到仓库(-m后面加一些注释,利于其它人知道你提交了啥东西):
git commit -m 'some log'
提交到远程:
我们做了修改,需要push到远程上,其它人才能看到我们做的更改。但是呢这里需要注意,由于是要将本地的文件保存到远程,那么就可能出现别人更改同一个文件同一处代码并已经push到远程,导致冲突。所以我们push到远程时,先将远程的所有更新拉到本地来,看有没有冲突,有的话就解决冲突的地方;没有更好,再提交到远程。
步骤:
先拉远程的所有更新:
git pull
执行后会打印是否有冲突,有的话,根据提示找到冲突并解决。然后重新保存所有更改到暂存区,再commit,最终执行:
git push
提示成功,这时我们已将本地做的修改都push到远程,其它人就能看见了。
3.查看并使用某远程分支
给一个分支,需要在上面就行修改等工作。假设远程上分支为rd_fixbug_v1.3,需要切换到该分支并查看并修改,同时push到远程协同完成任务。
创建远程rd_fixbug_v1.3分支对应的本地分支my_rd_fixbug_v1.3 ,并跟踪:
git checkout -b my_rd_fixbug_v1.3 origin/rd_fixbug_v1.3
接下来就同上面的一般流程了。
4.合并分支
我们的稳定代码都在master分支上,当前开发的分支为rd_fixbug_v1.3,现在修改和测试都完成了,那么就要合并到master分支中完成修改bug任务。
因为要合并到master分支中,先切换到master分支:
git checkout master
使用指令进行merge:
git merge --no-ff rd_fixbug_v1.3
可能存在冲突,修改完成后,进行add,commit,那么此次merge就完成了。
git pull指令其实就是执行了git fetch拉取远程分支,并自动执行git merge来做合并
5.其它
如果不想让git再追踪该文件?
git rm --cached file
如果修改了某文件,想还原到上一次commit状态且没有add进暂存区,那么使用:
git checkout -- file
6.学习资料
pro git:
https://git-scm.com/book/zh/v2
廖雪峰Git教程:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000