git分支管理三

分支管理

https://www.liaoxuefeng.com/wiki/896043488029600/900003767775424

1、Git鼓励大量使用分支

查看分支:git branch 

创建分支:git branch <name>

切换分支:git switch <name>

创建+切换分支:git switch -c <name>

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

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

强制删除分支:git branch -D <name>

恢复删除的分支:git branch <branch_name> <hash_val>
注释:例如:git branch yanqi HEAD@{17} //恢复yanqi分支,head指向17
那17从哪里得来的呢?
   git reflog

 

 

2、主分支合并-解决冲突

冲突的产生:给master主分支创建一个huang分支,然后分别对这两个分支中对1.txt 文件的内容进行不同的修改,git add 和git commit后,返回到master主分支合并huang分支,这时1.txt合并时就会出错

正确做法:根据合并时报的那个有冲突的文件,查看其内容,修改点有冲突的地方,修改完git add 、git commit  后再合并时提示已是最新的。

 

合并 
git merge --no-ff -m "mrege 第一次合并" <name>

查看合并历史
git log --graph --pretty=oneline --abbrev-commit

 

 

 

 

 

3、bug分支

https://www.liaoxuefeng.com/wiki/896043488029600/900388704535136

情景: 你在dev分支上正在编辑文件,用来新增功能,此时master主分支有bug需要紧急修复;但你当前的dev上文件还没有写完不能commit到dev分支上去,怎么办?

解决方法: 

  1、先把当前未git add的文件add下。然后使用git stash 隐藏(此时你就可以看到git status 你的暂存区是干净的了),这时你就可以返回到master分支去修复bug;修复后,使用git stash list   看下隐藏序号,再git stash pop,回到工作现场(如果有多个隐藏,可以使用   git stash apply stash@{0}选中恢复哪一个,默认是0);

       2、master有bug,一般我们都是以新建分支huang 去修复,修复完commit到huang分支(此时会产生一个commit序列号),然后在merge到master上;

       3、master有bug,同样dev分支也会有bug(因为dev是用之前的master上分出来的),这时回到dev分区,可以用git cherry-pick <commit序号>命令,把bug提交的修改“复制”到当前分支,此时算是修复完成

注意:commit 序号要的是你修改完有问题文件后提交到huang分支时的commit序号

 

4、多人协作

https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320

每次操作前都先pull下,看是否有更新

 

 下边是例子:

查看远程库信息:

远程库名默认是origin

# git remote -v
origin    git@github.com:yanqi1993/web01.git (fetch)
origin    git@github.com:yanqi1993/web01.git (push)
说明:没有推送权限的,看不到push地址。

2、推送分支

把该分支上的所有本地提交推送到远程库。推送时,要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上:

git push origin master     //推送本地master主分支到origin远程库

git push origin yanqi       //推送yanqi分支到远程库到origin远程库

 

 

 3、抓取分支

模拟一个你的小伙伴,可以在另一台电脑(注意要把SSH Key添加到GitHub)或者同一台电脑的另一个目录下克隆:
克隆远程仓库:
git clone git@github.com:yanqi1993/web01.git

 

现在,你的小伙伴要在yanqi分支上开发,就必须创建远程origin的yanqi分支到本地,于是他用这个命令创建本地yanqi分支:

先把远程库最新的版本同步过来
git pull
git checkout
-b yanqi origin/yanqi

在yanqi分支下修改一个文件后,git add 、git commit 下,再push到远程仓库
git push origin yanqi

 

 

 4、同时我这边也修改

修改完git add 和 git commit 后push到远程仓库

[root@localhost web02]# git push origin yanqi
To github.com:yanqi1993/web02.git
 ! [rejected]        yanqi -> yanqi (non-fast-forward)
error: 推送一些引用到 'git@github.com:yanqi1993/web02.git' 失败
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 'git pull ...')。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。

 

 说是要我先pull

先建立对应关系(不是必须的,只有在pull完没有提示有差异时操作该项)
[root@localhost web02]# git branch --set-upstream-to=origin/yanqi yanqi
分支 'yanqi' 设置为跟踪来自 'origin' 的远程分支 'yanqi'。


[root@localhost web02]# git pull
自动合并 1.txt
冲突(内容):合并冲突于 1.txt
自动合并失败,修正冲突然后提交修正的结果。

 处理完冲突后再push就可以了。

 

3、标签管理

命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
1、默认commit打标签
   git show v1.0

2、如想给特定commit点打标签
  git log --graph --pretty=oneline --abbrev-commit   //找到git commit节点
  git tag v0.9 a7804c5

3、命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;

4、命令git tag可以查看所有标签。

5、命令git push origin <tagname>可以推送一个本地标签;
  git push origin v1.0

6、命令git push origin --tags可以推送全部未推送过的本地标签;
  git push origin --tags

7、命令git tag -d <tagname>可以删除一个本地标签;
  git tag -d v0.1

8、如果要删除远程标签删除顺序:
  先删除本地: git tag -d v0.9
  再删除远程:git push origin :refs/tags/v0.9 

 注意:标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签。

 

4、多个远程库的使用

https://www.liaoxuefeng.com/wiki/896043488029600/1163625339727712

 

posted @ 2020-03-23 11:36  无敌仙人掌  阅读(239)  评论(0编辑  收藏  举报
AmazingCounters.com