标签:git
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(分支可以移动,标签不能移动)
git tag -a v3.6.7.1 -m ‘my version 3.6.7.1’ 创建附注型标签
git config –global alias.visual “!gitk”调用外部命令
git branch 显示本地分支,不会切换到新的分支上
git branch testing 会在当前(最新)commit对象上新建一个分支指针
git checkout -b iss53 新建分支iss53并切换到该分支 <==> git branch iss53 ; git checkout iss53
git checkout testing 切换到testing分支,HEAD指向了testing分支。Git 会把工作目录的内容恢复为检出某分支时它所指向的那个commit的快照。它会自动添加、删除和修改文件以确保目录的内容和你上次提交时完全一样。
Git 中的分支实际上仅是一个包含所指对象校验和(40 个字符长度SHA-1 字串)的文件,新建一个分支就是向一个文件写入41 个字节
git每次提交时都记录了祖先信息.
bugfix操作:返回到原先已经发布到生产服务器上的分支。为这次紧急修补建立一个新分支。测试通过后,将此修补分支合并,再推送到生产服务器上。切换到之前实现新需求的分支,继续工作。
转换分支之前应保持清洁的暂存域或本地工作目录,否则容易出现切换的分支与切换前的分支冲突(用stashing和amending可绕过)
git checkout master ; git merge bugfix;会把master分支指针往前移,指向bugfix分支,因为他们在同一个分叉上。如果处于不同分叉上,git不会简单的右移,而是对要合并的两个分支以及他们的公共祖先的合并结果做一次快照,并让master指向该合并后的快照
git branch -d bugfix;//此时可以删除bugfix了,因为master已经和bugfix指向同一个提交了。
git branch -D testing删除未合并的分支会失败,可以用-D强制删
git branch -av 显示各个分支最后一次提交情况
git branch –merged[–no-merged]查看哪些分支已经被[没被]并入当前分支。对于merged的结果,如果有不标记为*的分支,可以删掉
从服务器clone代码到本地的时候,远程服务器上得master分支是origin/master,用户无法在本地修改它的内容,会在本地创建一个与origin/master一致的master分支,用户可以修改本地master的内容。只要不和服务器通信,origin/master指针不会移动。
git fetch origin 可以与服务器同步:获取本地尚未拥有的数据,更新本地的数据库,移动origin/master到最新位置。
git remote add teamone git@…. 添加项目的远程分支。会创建一个teamone/master分支。teamone与origin角色类似。
git push origin bugfix:bugfix2 提取我的bugfix分支并更新到远程仓库的bugfix2分支
git merge origin/master 合并本地的origin/master分支到当前分支。origin/master是本地不可编辑的
git checkout -b serverfix origin/serverfix 可以在远程分支origin/serverfix(是本地的一个分支)的基础上分化出一个新的分支。
从远程分支检出的本地分支,称为跟踪分支.git push,Git 会自行推断应该向哪个服务器的哪个分支推送数据. 而在这些分支里运行git pull 会获取所有远程索引,并把它们的数据都合并到本地分支中来。
上一语句可简化为git checkout –track origin/serverfix。由git自行推断应该向哪个服务器的哪个分支推送数据。
git push origin :bugfix 删除远程分支bugfix。冒号左边为空。译为提取空白然后把它变成远程分支bugfix
git push origin test4:test4将本地的分支test4推到远程服务器上,且名字是test4
将一个分支整合到另一个分支的方法:merge 和rebase衍合(把另一分支的变动在当前分支重放一遍)。衍合能产生一个更为整洁的提交历史。二者得到的结果一样。
git rebase –onto master server client 检出client 分支,找出client 分支和server 分支的共同祖先之后的变化,然后把它们在master 上重演一遍。接下来通过快进分支来使master合并到client(git checkout master;git merge client)。该语句不影响server分支。
git rebase 主分支master 特性分支server //该语句将特性分支在主分支上重演一遍,不要求事先切换到主分支。
注意:衍合之后需要快进分支。
永远不要衍合那些已经推送到公共仓库的更新。公开的衍合会带来问题。如果把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些永远不会公开的commit,那就不会有任何问题。如果衍合那些已经公开的commit,而与此同时其他人已经用这些commit 进行了后续的开发工作,那你有得麻烦了。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:git
原文地址:http://blog.csdn.net/cklsoft/article/details/46661857