一、常用开发模式
先看一张图
注意:
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 checkoutgit 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
…