一个非常方便的可视化 git 命令平台

git 概览

git 是一种分布式的代码版本控制工具。远端本地协同进行版本的控制,任意一台本地电脑上的数据都是服务器的克隆,服务器数据可以通过本地的数据进行恢复;本地具有完整的提交历史,可以检测出各个版本历史,可以完全脱离网络进行提交。
image.png

git 分支合并细节

分支合并

  • merge 方式:checkout 到 B 中,使用 merge 命令。最终在 B 中创建了一个节点存储 A 合并到 B 的结果
  • rebase 方式:分支历史更加干净,推荐使用。checkout 到 A 中,在 commit 之后 rebase 为 B。实际上就是将当前的改动节点追加到 B 分支之后,所以 rebase 完之后再进行 merge 后 B 的分支图就是比较干净的直线。

image.png

游离分支问题

在历史的节点中进行更改提交会导致出现游离的分支,若发现自己已经在游离分支上进行了提交,解决方案是使用 git checkout 创建分支。

远端协作

image.png

  • git pull = git fetch + git merge。git fetch 将远端的 main 分支内容拉取下来,然后同步本地的 origin/main 指针;git merge origin/main main,将获取的远端改动合并到当前的本地改动中。

image.png

  • git pull —rebase = git fetch + git rebase,将远端的改动拉取下来,并且进行换基,推荐使用,因为这样的分支历史会更加干净。

image.png

冲突

两个不同的分支,对同一个位置进行了不同的改动,就会出现冲突,需要选择一个进行保留。这也是 git rebase 或者是 git merge 常出现的情况。

  1. # current branch 'dev-2'
  2. git add -A
  3. git commit -m"feature"
  4. # before we push, rebase to origin/main
  5. git rebase origin/main

image.png
HEAD 指向当前分支的最新 commit,所以实际上 HEAD 就是指向从远端拉取的改动;而下边的则是当前本地的改动,在这两者间进行选择即可。

git workflow

典型分支模型

分支 说明 规范命名 checkout from merge to
master 最稳定的主干分支,随时可以当作 release 版本。不能在上边做任何提交,只能从其他分支合入。
develop 开发的主干分支,保存最稳定、最新的开发成果。主要合并其他分支,例如 feature 分支、bugfix 分支。
feature 新功能分支 feature/功能名 develop develop
release 发布分支,对应一次新版本的发布,只接受 bugfix release/发布名 develop develop、master
hotfix 生产环境中紧急热修复 hotfix/修复 bug 名 master、release develop、master

常用操作

  • 将最后一次的 commit 切换回 changes to be committed 状态
    git reset --soft HEAD^