约定几个分支的命名:
- master:保留完全稳定的代码,比如已经发布或即将发布的代码。
- develop:团队的主开发分支,可以看作是 master 的平行分支,稳定后就会合入 master。
- feature:个人开发分支,要从 develop 分支拉取最新代码。
几个区域
- 工作区
- 暂存区
- 本地仓库
- 远程仓库
常用的 git 指令
- git add
.
:工作区 -> 暂存区 - git commit -m "提交摘要": 暂存区 -> 本地仓库(只负责提交暂存区)
- git commit --ammend:
- git push origin master:
- git push origin master --force-with-lease:
- git push --force-with-lease origin myFeature:
- git push --force:
- git status:
- git checkout:
- git checkout -b:
- git pull:
- git pull origin dev --rebase:
- git pull --rebase origin dev:
- git branch:
- git branch -d:
- git diff
- git diff --cached
- git diff HEAD
- git stash:
- git stash pop:
- git log
- git remote -v
- git cherry-pick
- git reset
- git reset --hard
- git revert
- git fetch
- git merge myFeature:将指定分支合并到当前分支
- git rebase:变基,base 哪个分支进行修改。
- git rebase -i
- git rebase -i HEAD~3
- git rebase --continue
- git rebase --abort
git rebase 和 git merge 区别
当你在 feature 分支开发时,其他人在 develop 分支提交了新的 commit,这时可以使用git rebase
或git merge
合并这两个分支。
- 如下所示,此时
git merge
会在 develop 分支上生成一个新的 commit 来实现合并。
git checkout develop // 切换到 develop 分支
git merge feature // 将个人开发分支合并到 develop 分支
- 如下所示,此时
git rebase
将 feature 分支(待变基分支)整个移动到了 develop 分支(基分支)的最新的 commit 后面,会呈现一个线性的提交历史记录。
git checkout feature // 当前分支,也是待变基分支
git rebase develop // 基分支
两者区别:
- git merge
- 优点:保留分支的提交记录
- 缺点:会产生额外的 commit
- 应用场景:将代码合并到公共分支。
- git rebase
- 优点:不会额外产生 commit,提交记录是线性的、更加直观。
- 缺点:不能在共享分支上 rebase,会导致其他人在合并 master 时发生冲突。即如果一个本地分支有对应的远程分支就不能使用 rebase。
- 应用场景:将代码合并到个人分支。
日常开发流程
新建分支
- git checkout dev
- git pull
- git branch -b myFeature
提交代码
- git add .
- git commit -m "提交摘要"
- git pull origin dev --rebase:合并之前先拉取最新代码,添加 rebase 可以不生成 merge commit。
- git push origin myFeature
代码贮藏
- git stash
- git stash pop
合并分支、处理冲突
- git pull origin dev --rebase:合并之前先拉取最新代码
- git merge myFeature
- 合入后删除个人分支
解冲突
当在git merge
时遇到冲突怎么办? 先 git pull --rebase把主分支的最新代码拉取到本地,然后:
- git add .:处理完冲突后,提交到暂存区。
- git rebase --continue:合并冲突,再次 commit 解冲突后的代码
- git rebase -i HEAD~3:合并多余的几个 commit
- git push origin myFeature --force-with-lease:将代码 push
git 初始化设置
- git clone
- git push -u origin master
- git init