赞
踩
1.git的工作目录下面的所有文件又分为两种情况:已跟踪和未跟踪。
2.git内目录(这里指的是已跟踪的目录)有三种状态:
1.对一个文件初始化到纳入git目录管理当中,要经过三个步骤:
git branch [branch-name]该命令在本地仓库创建一个[branch-name],但是HEAD指针没有切换到的该分支上(如果要切换到该分支上还要执行git checkout [branch-name]),git checkout -b [branch-name]改命令会在本地仓库创建[branch-name]分支并切换到给分支上。
删除命令
git rm fileName(要删除的文件名),该命令同时删除工作目录和暂存区的fileName文件(删除后你要执行一次git commit -m”“后,git status才会干净),但如果你在你删除之前修改过了git目录的文件,并把它放入了暂存区,你要用git rm -f fileName来删除其文件,git rm –cached fileName该命令只删除暂存区的fileName文件,而不删除工作区的fileName文件。(如果你手动删除工作目录的fileName文件时,因为暂存区的fileName文件没要删除,故你需要执行git rm fileName命令后才能提交。)
git push origin :[remote-branch]会删除对应的远程仓库[remote-branch]的分支且本地仓库相对应的origin/[branch]也会删除(远程仓库URL为origin前提下)。
修改操作
git commit -amend该命令修改最后一次提交,该说明信息会覆盖最好提交的信息,如果你有工作目录的文件没有被提交到git本地仓库中,你可以先执行git add fileName,把该文件放入暂存区,然后在执行git commit -amend命令。
要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
.gitignore例子:
6.有时候我们只想要把两个分支有差异的内容提取出来,然后合并到另一个分支中,git也提供了两个方便的操作符。
git diff [branch] > patch该名命令是把当前的分支的git目录的内容与branch分支比较,如果与当前分支内容有差异,则把差异的部分的内容生成patch补丁,这是你可以用git checkout branch,git apply patch这两条命令合并patch补丁的内容.可以用git apply –check 查看补丁是否能够干净顺利地应用到当前分支中。
git checkout commit_id(为提交时产生的SHA-1校验码) filename取文件fileName在commit_id的文件版本, 这里取到的文件会存入暂存区,所以你要执行一次git commit -m”“。
8.git提供两种代码合并的方式,一种是merger(合并),另一种是rebase(衍合),下面就是这些两种操作的命令用法和例子:
git merge branch,当前分支会合并branch分支,它会找当前分支和branch分支的祖先,如果发现branch不是当前分支的祖先,则会找两个分支最近的共同祖先进行三方合并, git merge origin/branch也会像上面的规则去合并,只不过这里是当前分支合并本地仓库中的远程仓库的分支。
例子:
合并前的情况:
用git merge master命令后git会选择 C2,C4,C5进行三方合并,合并后的情况后如图:
注意这种合并,如果你遇到合并冲突,请用手动解决后,再用git add命令可以表示冲突已解决。
第一种情况
假设有三个人(beyondboy,sungirl,scauboy)协作开发一个小型项目,并设置远程仓库有两个分支master(稳定分支),develop(开发分支),其中beyondboy拥有远程仓库master的管理权限,而sungirl,scauboy没有这个管理权限,三个合作者都拥有这个人develop管理权限。如图:
远程仓库设置:
刚开始工作的三者本地仓库:
工作后的三者本地仓库的情况
sungirl用git push origin把本地仓库的develop推送到远程仓库中后,远程仓库的情况:
这是scauboy用git fetch origin要把自己的develop分支推送到远程仓库中,必须先执行git fetch origin命令后,拉取sungirl推送的信息,然后在合并其分支(建议合并时候先创建新的一个分支,合并其sungirl的推送的代码,如果没问题后,再用develop分支(git merger origin/develop)去合并代码,合并后的scauboy本地仓库情况:
scauboy把本地仓库的develop推送远程仓库后:
beyondboy用git fetch origin从远程仓库拉取信息:
beyondboy先新创建一个分支合并拉去的信息,如果没问题后,再用develop分支区合并,合并后,再切换到master分支,合并develop后,将其master分支推送到远程仓库中。
beyondboy推送后的情况:
其beyondboy合作者推送后,远程仓库的情况:
第二种情况:
假设有三个人(beyondboy,sungirl,scauboy)协作开发一个小型项目,并设置远程仓库有两个分支master(稳定分支),develop(开发分支),其中beyondboy拥有远程仓库master的管理权限,而sungirl,scauboy没有这个管理权限,三个合作者都拥有这个人develop管理权限,不过这里有点不同的是,beyondboy想要参与sungirl,scauboy开发的另一种功能(就是他们两个除了develop分支,还有另外一个分支在开发新的功能),而不是只开发一个功能。如图:
远程仓库设置:
本地仓库工作后的情况:
sungirl和scauboy都各自的另一个功能的任务完成了,这时用git push origin featureA:featureA和git push origin featureB:featureB应该把它们这两个功能推送到远程仓库中后,继续完成剩下的develop分支的任务,这时beyondboy可以拉取该featureA和featureB功能的信息,这样beyondboy就可以参与开发了。
sungirl和scauboy推送到远程仓库后,其远程仓库后的信息:
这时beyondboy执行git fetch origin命令后,beyodnboy的本地仓库的情况:
接下来就可以按照第一种情况去开发合并了,这里我就不详细描述了。
建议:拉取远程仓库最好用fetch不要用pull,合并前创建一个新分支来检查与拉取信息合并的是否问题,推送禁止用git push -f强推分支到远程仓库,因为这会覆盖原来的远程仓库信息,会导致远程仓库的信息和你的本地仓库一样。
对于上面的流程,查看远程仓库历史的其提交对象有点多,你可以用衍合的操作,git rebase branch去减少提交的对象,不过你一定要牢记一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。