< 笔记 > Git
来源:互联网 发布:360网络电视直播 编辑:程序博客网 时间:2024/05/22 09:48
06 Git 分支管理
By Kevin Song
- 06-01 创建与合并分支
- 06-02 解决冲突
- 06-03 分支管理策略
- 06-04 存储工作区
- 06-05 Feature分支
- 06-06 多人协作
分支作用:
- 主分支不能一直在修改(会导致项目中其他人不能干活)
- 主分支不能一次性推送(会导致一个篮子里鸡蛋都碎了)
- 创建一个新分支
- 在新分支中工作
- 随时提交
- 开发完合并到Master Branch
06-01 创建与合并分支
1 . 创建分支
$ git branch dev
2 . 切换分支
$ git checkout devSwitched to branch 'dev'
第一第二步可以合并成一句:
$ git checkout -b devSwitched to a new branch 'dev'
3 . 查看当前分支
- 当前分支前有星号
$ git branch* dev master
4 . 修改readme.txt文件并提交到当前分支
Creating a new branch is quick.
$ git add readme.txt $ git commit -m "branch test"[dev fec145a] branch test 1 file changed, 1 insertion(+)
5 . 切换回master分支
$ git checkout masterSwitched to branch 'master'
6 . 合并dev分支到master分支
$ git merge devUpdating d17efd8..fec145aFast-forward readme.txt | 1 + 1 file changed, 1 insertion(+)
7 . 删除dev分支
$ git branch -d devDeleted branch dev (was fec145a).
06-02 解决冲突
两个分支的同一个文件做了不同修改导致 冲突
feature1分支修改readme.txt
$ git checkout -b feature1Switched to a new branch 'feature1'
Creating a new branch is quick AND simple.
$ git add readme.txt $ git commit -m "AND simple"[feature1 75a857c] AND simple 1 file changed, 1 insertion(+), 1 deletion(-)
master分支修改readme.txt
$ git checkout masterSwitched to branch 'master'Your branch is ahead of 'origin/master' by 1 commit.
Creating a new branch is quick & simple.
$ git add readme.txt $ git commit -m "& simple"[master 400b400] & simple 1 file changed, 1 insertion(+), 1 deletion(-)
master分支和feature1分支各自都分别有新的提交
此时合并会产生冲突
$ git merge feature1Auto-merging readme.txtCONFLICT (content): Merge conflict in readme.txtAutomatic merge failed; fix conflicts and then commit the result.
直接查看readme.txt的内容:
Git is a distributed version control system.Git is free software distributed under the GPL.Git has a mutable index called stage.Git tracks changes of files.<<<<<<< HEADCreating a new branch is quick & simple.=======Creating a new branch is quick AND simple.>>>>>>> feature1
修改如下后保存:
Creating a new branch is quick and simple.
再提交:
$ git add readme.txt $ git commit -m "conflict fixed"[master 59bc1cb] conflict fixed
git log 可以看到分支的合并情况:
$ git log --graph --pretty=oneline --abbrev-commit* 59bc1cb conflict fixed|\| * 75a857c AND simple* | 400b400 & simple|/* fec145a branch test...
删除feature1分支:
$ git branch -d feature1Deleted branch feature1 (was 75a857c).
06-03 分支管理策略
合并分支默认使用Fast forward 模式
Fast Forward 缺点:删除分支后,会丢掉分支信息
禁用Fast forward模式
1 . 创建并切换dev分支:
$ git checkout -b devSwitched to a new branch 'dev'
2 . 修改readme.txt文件,并提交一个新的commit:
$ git add readme.txt $ git commit -m "add merge"[dev 6224937] add merge 1 file changed, 1 insertion(+)
3 . 切换回master:
$ git checkout masterSwitched to branch 'master'
4 . 合并dev分支
- –no-ff参数:禁用Fast forward
- -m参数:添加commit描述
$ git merge --no-ff -m "merge with no-ff" devMerge made by the 'recursive' strategy. readme.txt | 1 + 1 file changed, 1 insertion(+)
分支策略
- master分支:只用来发布新版本,不用来开发
- dev分支:用来开发
- 每个人在dev分支上开发,每个人都有自己的分支,时不时往dev分支上合并
- dev分支:用来开发
06-04 存储工作区
git stash存储当前工作区
$ git stashSaved working directory and index state WIP on dev: 6224937 add mergeHEAD is now at 6224937 add merge
git stash list查看存储的工作区:
$ git stash liststash@{0}: WIP on dev: 6224937 add merge
恢复方法一:git stash apply
- stash内容不删除
- git stash drop手动删除
恢复方法二:git stash pop
- stash内容恢复后删除
$ git stash pop# On branch dev# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## new file: hello.py## Changes not staged for commit:# (use "git add <file>..." to update what will be committed)# (use "git checkout -- <file>..." to discard changes in working directory)## modified: readme.txt#Dropped refs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)
06-05 Feature分支
新建一个新功能分支,开发完再合并到master branch
$ git checkout -b feature-vulcanSwitched to a new branch 'feature-vulcan'
开发完毕
$ git add vulcan.py$ git status# On branch feature-vulcan# Changes to be committed:# (use "git reset HEAD <file>..." to unstage)## new file: vulcan.py#$ git commit -m "add feature vulcan"[feature-vulcan 756d4af] add feature vulcan 1 file changed, 2 insertions(+) create mode 100644 vulcan.py
切回dev,准备合并:
$ git checkout dev
突然要销毁该分支
$ git branch -d feature-vulcanerror: The branch 'feature-vulcan' is not fully merged.If you are sure you want to delete it, run 'git branch -D feature-vulcan'.
删不了,只能强制删除
$ git branch -D feature-vulcanDeleted branch feature-vulcan (was 756d4af).
06-06 多人协作
git remote 查看远程仓库信息
$ git remoteorigin
git remote -v 查看详细远程仓库信息
$ git remote -vorigin git@github.com:KevinJtSong/learngit.git (fetch)origin git@github.com:KevinJtSong/learngit.git (push)
推送分支
推送master branch
$ git push origin master
推送dev branch
$ git push origin dev
分支种类
- master branch:时刻与远程同步
- dev branch:时刻与远程同步
- bug branch:只用于在本地修复bug,不需要推送
- feature
抓取分支
同事A克隆了仓库
$ git clone git@github.com:michaelliao/learngit.gitCloning into 'learngit'...remote: Counting objects: 46, done.remote: Compressing objects: 100% (26/26), done.remote: Total 46 (delta 16), reused 45 (delta 15)Receiving objects: 100% (46/46), 15.69 KiB | 6 KiB/s, done.Resolving deltas: 100% (16/16), done.
同事A只能看到master branch
$ git branch* master
同事A要在dev分支上开发必须创建origin的dev分支到本地
$ git checkout -b dev origin/dev
同事A把dev分支push到远程:
$ git commit -m "add /usr/bin/env"[dev 291bea8] add /usr/bin/env 1 file changed, 1 insertion(+)$ git push origin devCounting objects: 5, done.Delta compression using up to 4 threads.Compressing objects: 100% (2/2), done.Writing objects: 100% (3/3), 349 bytes, done.Total 3 (delta 0), reused 0 (delta 0)To git@github.com:KevinJtSong/learngit.git fc38031..291bea8 dev -> dev
同事B对同样的文件作了修改,并试图推送:
$ git add hello.py $ git commit -m "add coding: utf-8"[dev bd6ae48] add coding: utf-8 1 file changed, 1 insertion(+)$ git push origin devTo git@github.com:KevinJtSong/learngit.git ! [rejected] dev -> dev (non-fast-forward)error: failed to push some refs to 'git@github.com:KevinJtSong/learngit.git'hint: Updates were rejected because the tip of your current branch is behindhint: its remote counterpart. Merge the remote changes (e.g. 'git pull')hint: before pushing again.hint: See the 'Note about fast-forwards' in 'git push --help' for details.
推送失败,必须先
用git pull把最新的提交从origin/dev抓下来,然后,在本地合并,解决冲突,再推送:
$ git pullremote: Counting objects: 5, done.remote: Compressing objects: 100% (2/2), done.remote: Total 3 (delta 0), reused 3 (delta 0)Unpacking objects: 100% (3/3), done.From github.com:michaelliao/learngit fc38031..291bea8 dev -> origin/devThere is no tracking information for the current branch.Please specify which branch you want to merge with.See git-pull(1) for details git pull <remote> <branch>If you wish to set tracking information for this branch you can do so with: git branch --set-upstream dev origin/<branch>
git pull也失败,原因是没有指定本地dev分支与远程origin/dev分支的链接,先设置dev和origin/dev的链接:
$ git branch --set-upstream dev origin/devBranch dev set up to track remote branch dev from origin.
再pull:
$ git pullAuto-merging hello.pyCONFLICT (content): Merge conflict in hello.pyAutomatic merge failed; fix conflicts and then commit the result.
这回git pull成功,但是合并有冲突,需要手动解决,解决的方法和分支管理中的解决冲突完全一样。解决后,提交,再push:
$ git commit -m "merge & fix hello.py"[dev adca45d] merge & fix hello.py$ git push origin devCounting objects: 10, done.Delta compression using up to 4 threads.Compressing objects: 100% (5/5), done.Writing objects: 100% (6/6), 747 bytes, done.Total 6 (delta 0), reused 0 (delta 0)To git@github.com:michaelliao/learngit.git 291bea8..adca45d dev -> dev
多人协作 工作模式
- 用git push origin branch-name推送自己的修改
- 如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并
- 如果合并有冲突,则解决冲突,并在本地提交
- 没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功
- Git -> git log笔记
- Git 笔记 git add
- Git 笔记, git commit
- 【git】git学习笔记
- git笔记
- git笔记
- git笔记
- git笔记
- git笔记
- git 笔记
- git笔记
- git 笔记
- git笔记
- Git 笔记
- GIT笔记
- Git笔记
- Git笔记
- [笔记]Git
- Java:ASCII码排序
- Eclipse安装PyDev插件后,preference中不显示Pydev问题原因及解决办法
- 区块链智能合约底层编译环境搭建开发虚拟货币技术
- Java基础
- JPA 配置类实体映射示例
- < 笔记 > Git
- RS232串口通信原理
- 阿里云主机(Ubuntu16.04 64位)安装tomcat8并修改监听端口
- leetcode---linked-list-cycle---链表中点
- mybatis dao参数个数,和后面的xml的取值问题
- cmd中可以运行java,但不能运行javac命令
- CentOS--网络配置详解
- 解析xml的4种方法详解
- MD5算法