Github概念理解备忘录

总结:

add就是用来建立跟踪,添加文件到缓存区

commit就是把文件缓存区的文件正式加到本地库中;

push就是把本地库更新到远程库中;

git命令的操作要在仓库所在目录下进行才有效;

在Github上,可以任意fork开源仓库;

自己拥有fork后的仓库的读写权限;

可以推送pull request给官方仓库来贡献代码;

=====================================================

如果远程仓库做了修改,如何更新到本地?

查看远程分支:git remote -v

查看状态:git status

从远程获取最新版本到本地:

  1)在本地创建新temp分支的办法,将远程origin仓库的master分支代码下载到本地temp分支:git fetch origin master:temp;

  2)接第1步,也可以使用 git fetch origin master;

  3)使用命令:git diff temp;用来比较本地代码与刚从远程下载下来的代码的区别;

  4)合并temp分支到本地的master分支;git merge temp

  5)删除temp分支:git branch -d temp,如果该分支没有merge到本地,那么该分支就会报错,可以添加-d参数来强制删除;

====================================================

分支:

分支产生的背景和意义:

举个例子,准备开发一个新功能,需要两周时间,如果活还没干完,不完整的代码库会导致别人没法干活;如果一次性全部写完再一次提交,又存在丢失每天进度的风险;

现在有了分支,就不用怕了,先创建一个分支,别人看不到,还可以在原来分支上正常工作;而你再自己的分支上干活,想提交就提交;

当自己完成了开发,就可以一次性合并到原来的分支上,又安全又不影响别人工作;

 

分支的原理(参考廖雪峰的Git教程):

  每一次提交,Git都把他们串成一条时间线

  HEAD 指向当前分支;

  master 指向提交;master是主分支,每次提交,master分支都会向前移动一步,这样,随着你不断提交,master分支的线会越来越长;

  创建一个新的分支,例如dev,即增加了一个dev指针,修改HEAD的指向,指向dev。即完成分支的创建,工作区文件没有任何变化;

  在dev上的工作结束之后,就可以把dev和master合并,最简单的方法,直接把master指向dev的当前提交,就完成了合并,HEAD指向master;

  合并完分支后,甚至可以直接删除dev分支。删除分支dev就是把dev指针给删掉,这样就剩下了一条master分支;

冲突:

创建并切换一个分支feature1:git checkout -b feature1  (checkout是直接到工作区,当前分支是feature)

在feature1分支修改文件:add、commit;

合并分支feature1到master:git merge feature1;

如果有冲突解决冲突,冲突即要合并时,发现master也产生了提交,用git status检查冲突;

 

关于分支的命令总结:

创建并切换分支: git checkout -b <name>

创建分支:git branch <name>

切换分支:git checkout <name>

查看当前分支:git branch

合并某分支到当前分支:git merge <name>

删除分支:git branch -d <name>

在本地仓库中建立一个远程仓库的别名,以便之后提交代码时,不需要每次都输入远程仓库的地址:git remote add origin git@<git 仓库的地址>;

本地新分支更新到远程仓库中:git push origin <NewBranchName>

拉取远程分支到本地分支:git pull <远程主机名> <远程分支名>:<本地分支名>    例如:git pull origin master:wy  ->这条命令可以理解成git fetch+git merge;

如果改成:git pull origin master,省略了后面的冒号的话,表示将远程origin主机的master分支拉取过来和本地的当前分支合并;

这么看fetch更加安全,再merge之前,可以查看更新情况,然后再决定是否合并;

 

分支管理策略:

master分支应该是十分稳定的,仅用来发布新版本;

dev分支是不稳定的用来干活的;

多人合作时,每个人都再dev分支上干活,每个人都有自己的分支,是不是往dev分支上合并即可;

====================================================

标签:

标签的意义:

标签是版本库的一个快照;

例如:遇到需要上周一那个版本,版本号是V1.2,按照v1.2查找commit就行;如果查找commit号的话,一串乱七八糟的数字不好找;

tag是让人容易记住的有意义的名字,它跟某个commit绑定在一起;

标签是和具体一个commit挂钩的,如果这个commit既出现在master分支上,又出现再dev分支上,在这两个分支上都可以看到标签;

 

操作过程:

切换到需要打标签的分支上:git branch;git checkout <branchname>;

打标签:git tag <name>;

查看标签:git tag;

默认标签是打在最新commit上的。如果忘记打标签的话,找到历史提交的commit id,然后打上;

查看标签的信息:git show <tagename>;

如果标签打错了,可以删除:git tag -d v0.1

因为创建的标签只在本地,不会推送到远程,删除错误的标签比较容易;

如果要推送某个标签到远程,使用命令 git push origin <tagname>;

一次性推送全部尚未推送到远程的本地标签:git push origin --tags;

如果标签已经推送到远程,要删除远程标签的话,就麻烦一些,要先本地删除,再从远程删除,命令也是用push的方法;

猜你喜欢

转载自www.cnblogs.com/grooovvve/p/10741595.html