# CooperationTest **Repository Path**: kongnang/cooperation-test ## Basic Information - **Project Name**: CooperationTest - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-03-20 - **Last Updated**: 2022-04-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # git多人协作测试 ## 1. 冲突解决 后提交者无法`git pull`,需要先`git commit`或者`git stash` 这是由于`git pull`= `git fetch `+ `git merge`, 需要先提交git才知道你修改了哪部分,且冲突部分需要手动合并 ![](./img/011.jpg) ## 2. 分支 ### 2.1 创建并切换分支 ```shell git branch iss53 git checkout iss53 ``` 等价于 ```shell git checkout -b iss53 # 查看分支 git branch ``` ### 2.2 分支推进 继续在iss53分支中工作,并进行一些提交 ```shell git commit -a -m 'added a new footer [issue 53]' git push origin iss53 ``` ![](./img/002.jpg) ### 2.3 合并分支hotfix 新建一个hotfix分支 ```shell git checkout -b hotfix ``` ![](./img/003.jpg) hotfix分支测试通过后,合并回master分支来部署到线上 ```shell git checkout master git merge hotfix ``` ![](./img/004.jpg) ### 2.4 删除分支hotfix 现在已经不需要hotfix分支了,我们可以先删除它 ```shell git branch -d hotfix ``` ![](./img/005.jpg) ### 2.5 合并分支iss53 假设分支iss53中的问题已经修复,现在要并入master分支 ```shell git checkout master git merge iss53 ``` 因为,master分支所在的提交并不是iss53分支所在提交的直接祖先,所以git还需要做一些额外的工作。git会使用两个分支的末端(C4和C5)以及这两个分支的公共祖先C2,做一个简单的三方合并。 ![](./img/006.jpg) ![](./img/007.jpg) 删除iss53分支 ```shell git branch -d iss53 ``` ## 3 分支管理 ```shell git branch ``` ```shell git branch -v ``` ```shell git branch --merged # 查看已合并的分支 ``` ```shell git branch --no-merged # 查看未合并的分支 ``` ```shell git log --graph --full-history --all --pretty=format:"%h%x09%d%x20%s" # 分支可视化 ``` ## 4 变基 在git中整合来自不同分支的修改主要有两种方法:`merge`以及`rebase` 之前提到过,`merge`命令会把两个分支末端(C3和C4)以及二者最近的共同祖先C2进行三方合并 ![](./img/008.jpg) 我们在此基础上进行变基,将C4中的修改变基到C3上 ```shell git checkout experiment git rebase master ``` 它的原理是首先找到这两个分支(即当前分支 experiment、变基操作的目标基底分支 master)的最近共同祖先 C2,然后对比当前分支相对于该祖先的历次提交, 然后将当前分支指向目标基底 C3。 ![](./img/009.jpg) 回到master分支,进行合并 ```shell git checkout master git merge experiment ``` ![](./img/010.jpg) 此时,C4' 指向的快照就和 the merge example 中 C5 指向的快照一模一样了。 这两种整合方法的最终结果没有任何区别,但是变基使得提交历史更加整洁。 你在查看一个经过变基的分支的历史记录时会发现,尽管实际的开发工作是并行的, 但它们看上去就像是串行的一样,提交历史是一条直线没有分叉。