Git 协作纪要

一、常用开发模式

先看一张图
这里写图片描述

注意:
1、少用pull或不用pull;
2、本地的多个分支,如果不是用命令行的话,对文件修改是对所有分支内容修改。

git clone -> 修改 ->


以下分情况讨论:

1、当你采用本地commit再远程push的连贯方式

(将远程master获取到本地仓库假设为tmp,为后期查看log或merge等)
git fetch origin master

->
(查看本地master和刚才fetch的origin/master直接2条差异,-p查看详细)
git log master origin/master -n

示例:

这里写图片描述

->
(合并origin/master到本地的master,这一步往往比较揪心,可能有冲突,解决后需:
git add xx git commit xx
)

当别人比你先提交时,会出现这个错误:

这里写图片描述

解决:
git stash git pull git stash pop

这里写图片描述
(一个个文件查看改动,无问题则add,然后commit,然后git diff –stat看看还有多少)
git diff -w app/auth/views.py
(add 一个少一个)
git diff --stat

这里写图片描述

(记得commit)
git merge origin/master
->
(提交到远程origin/master)
git push origin/master
2、当你采用本地commit,过一段较长时间再远程push的方式

->
git fetch origin master
->
git merge origin/master
这时那些不一致的就会发生冲突

这里写图片描述

修改文件内容的冲突后,这时你通过git add和git commit可解决

->
git push origin/master

3、tips

当查看别人甚至做了一些调试,要撤销pull以来(或者说commit之后)的操作,则用git checkout
git checkout -- filename
用暂存区中filename文件来覆盖工作区中的filename文件(慎用【git checkout . 】表示所有)。

二、改进工作流

习惯了merge之后,对git的工作流维护也是相当重要,主要是方便差错,对于各个commit的整理也是有益的。
1、git rebase
重新定义(re)起点(base),整合工作流。

  • merge

git checkout mywork git merge origin

会生成如下的树(借用网上的图):

这里写图片描述

这样C5、C6都属于工作流的一部分,当你回退到C5时就没应用到C4的修改,需要再进行操作。

  • 如果用rebase:

git checkout mywork git rebase origin

把orgin的最新commit C4 作为当前分支mywork的基础,则生成的树图示如下:

这里写图片描述

  • 配合远程

git pull --rebase origin master

–rebase选项告诉Git,在同步了中央仓库的修改之后,将Mary所有的提交移到master分支的顶端。

  • 假如冲突

git add . git rebase --continue

注:rebase的操作相对于merge操作,因为发生了时间跳跃,当发生冲突时会比较混乱(虽然 我还没遇到)。

三、分支

1、新建本地分支
git branch gujw
2、查看本地分支
git branch
3、切换本地分支
git checkout gujw
示例:
这里写图片描述

4、查看远程分支
git branch -a
示例:
这里写图片描述

###三、仓库移动

当远程仓库域名什么的发生变化,应该是比较常见的情况。

1、查看当前本地仓库链接到的远程仓库
git remote -v
2、按照格式更改url即可
git remote set-url XXXXX

###四、撤销操作

如果你推送到remote的commit没有被其他人pull过,那么你可以使用
git reset --hard <commit-hash> //可以用客户端Amend代替 git push -f origin master


Comments