git的管理,对于协同开发,确实很有帮助,下面简介一些最最常用的,一般能使用这些,就能够得心应手了。
注意:git的操作,只是针对变化的文件,对比起原先的,是变化的文件
最最基本的,就是如下命令,不再细讲:
git status
git pull origin(远程仓库名) master(分支名)
git push origin(远程仓库名) local_master(本地分支名):remote_master(远程分支名)
git clone [-b 远程分支] link(仓库链接) [在本地的仓库名]
git add -u(添加变更的) /.(添加新的和修改的,不包括删除的) /-A(所有) /file_path(文件目录)
git commit -m(描述)/-am(等同于先add再commit,只对文件内容变更有效果) "statement"
git reflog
git reset --hard(回复到指定版本且删除) version_code
git remote add origin(远程仓库名) link(远程仓库链接)
关于分支的话,大概的思路是:
假设本地有master主分支了,里面有文件a.html和b.html,那么,我若是想要建立一个新的分支other,执行:
git branch other
注意,master必须要有一次commit之后,才能开辟分支,否则报错:fatal: Not a valid object name: 'master'. 如果只commit了a.html,没有commit文件b.html,开辟other的话,是两个都会有,只是,b.html是看做改变文件,a.html是已经“确认”的,这时候,哪个分支commit了b.html,那么,它就属于谁,详情请继续看。
删除分支是:
git branch -d other
那就建立新的分支了,但是还在master分支上,查看所有的分支:
git branch
切换到分支other:
git checkout other
执行
git reflog
可以发现,历史记录连切换分支这个行为,都是有记录的。新建立的分支,里面的文件,和master里面的一样【master最近commit了的文件】,都有a.html和b.html。这时候,如果我在other分支新增一个文件:c.html,然后先不add,git status显示红色。然后git checkout master切换回主分支之后,在执行git status发现,c.html也会显示状态是红色的未添加新文件;然后,我git checkout other切换回other分支以后,执行git add c.html和git commit -m "other add",git status发现没有文件了,ls查看,发现c.html文件存在。在这个时候,我git checkout master切换回主分支之后,执行ls,发现,c.html文件不存在!所以,说明,在本地的分支操作中,有了文件的变动,切换到各个分支git status查看,都是可见的,如果,哪个分支执行了git add和git commit的命令,最终,新的变动就会被确定,属于那个分支,不论哪个分支造成了变动的发生。即使是other创建的c.html,我在master分支执行add和commit,对c.html进行提交后,那么,c.html也会对只属于master分支,而非other分支。
如果我在分支master,想要合并other的变动到master,那么,执行:
git merge other
当然,可能是会发生冲突的,冲突的内容,会被标记出来在文件里面如下:
<<<<<<< HEAD
master change
=======
other change
>>>>>>> 9d052eac23as0eafd79233daa62b6db06a2f6086
<<<<<<<HEAD和=======之间,是master的内容,=======和>>>>>>>...是other修改的内容,这时候,解决冲突,就是打开冲突文件,进行选择和保留,去除冲突标记符号,然后,再对这个冲突文件,再git add 和git commit,这时候,就已经merge了,并且解决了冲突。
对于远程的代码托管仓库,原理差不多,只不过,常见的的操作,就是对其分支进行提交,拉取等,不涉及其他的,合并这些本地解决就好。
有意思的是,如果我切换到了other分支,那么,本地的git仓库里面,就只看得到other分支上的文件,另外分支的文件不可见,这个功能,确实很好玩的。
关于服务器上使用git的一个东西:公钥
服务器上的bash,是没有账户密码的,大多是直接用系统命令安装的git,所以,如何安全的传输呢?就全靠公钥了。
当我想要在服务器clone项目的时候,是不被允许的,往往会报错说权限不允许,permission deny之类的,原因是,你是陌生人,随便就能使用项目了?所以,要解决,需要一个认证,怎么认证?生成一个公钥【在服务器生成】,然后在浏览器登陆远程托管仓库的账号,在项目里面,添加一个项目的公钥,然后,通过一次公钥的对接,就可以完成一次信任的握手,就可以clone项目了。详细:
在服务器执行
ssh-keygen -t rsa -C"xxxxx@xxxxx.com"
然后连续回车,就会生成公钥,进入公钥目录:
cd ~/.ssh
查看公钥:
vim id_rsa.pub
将其中的公钥的值,复制出来,添加在浏览器中的远程仓库的项目下,然后,在服务器执行:
ssh -T git@gitee.com
相当于给这个远程仓库握个手,建立信任关系,然后就可以从这个项目中clone和pull代码了。
对于想要push的写操作,那么,需要再个人的账号处,添加个人的公钥,生成方法一样的,覆盖之前的【握手成功后就没作用了,必须重新生成】,然后,复制到浏览器的个人ssh密钥处,同样执行
ssh -T git@giee.com
进行握手,就可以愉快的推拉啦!