Git 梳理

80 阅读3分钟

约定几个分支的命名:

  • 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 rebasegit merge合并这两个分支。

  1. 如下所示,此时git merge会在 develop 分支上生成一个新的 commit 来实现合并。
git checkout develop  // 切换到 develop 分支
git merge feature  // 将个人开发分支合并到 develop 分支
  1. 如下所示,此时git rebase将 feature 分支(待变基分支)整个移动到了 develop 分支(基分支)的最新的 commit 后面,会呈现一个线性的提交历史记录。
git checkout feature  // 当前分支,也是待变基分支
git rebase develop  // 基分支

两者区别:

  • git merge
    • 优点:保留分支的提交记录
    • 缺点:会产生额外的 commit
    • 应用场景:将代码合并到公共分支。
  • git rebase
    • 优点:不会额外产生 commit,提交记录是线性的、更加直观。
    • 缺点:不能在共享分支上 rebase,会导致其他人在合并 master 时发生冲突。即如果一个本地分支有对应的远程分支就不能使用 rebase。
    • 应用场景:将代码合并到个人分支。

日常开发流程

新建分支

  1. git checkout dev
  2. git pull
  3. git branch -b myFeature

提交代码

  1. git add .
  2. git commit -m "提交摘要"
  3. git pull origin dev --rebase:合并之前先拉取最新代码,添加 rebase 可以不生成 merge commit。
  4. git push origin myFeature

代码贮藏

  • git stash
  • git stash pop

合并分支、处理冲突

  1. git pull origin dev --rebase:合并之前先拉取最新代码
  2. git merge myFeature
  3. 合入后删除个人分支

解冲突

当在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