Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

git 实践之 —— 如何开一个干净的分支?

  好像很多 git 教程中都介绍说让自己的 master 保持与主分支一致,所有的开发都从自己的 master 开出新分支。但我发现经常有人会遇到自己的所有本地分支包括 master 在内的都是脏的情况不会解决。其实如果知道 reset 命令的用法就根本不会有遇到这样的问题吧?
  reset 再 pull 不就可以了么?如果某个分支是脏的,并且上面的东西都是没用的,那么只要 reset 到先前干净的版本再 pull 最新代码不就是最新的了么?我很好奇为什么会遇到这样的问题。但既然我开始扯这个话题了就意味着我希望有更多、更快的方法来解决这个问题。
  其实我并不觉得让本地的 master 与主分支保持一致是一个好实践。比如我自己就经常拿本地 master 当 hotfix 用。有时候紧急修复个东西来得开个新分支就直接 master 上改了。本地本身就有个自带的与主分支同步的分支,假如 remote 叫 origin,主分支叫 master 的话,本地想切到这里就可以直接 checkout 过去 git checkout origin/master   它一定是干净的,但是未必是最新的。如果有需要可以把它 pull 到最新。可以从这里 checkout -b 来创建出新的干净分支开发新功能。 git checkout origin/master # git pull origin master # 如果觉得自己的代码足够新可以跳过 git checkout -b xxx   省略了 pull 的步骤就省去了网络请求,两个 checkout 是非常快的。当然前面 reset + pull 的方法也可以换成 reset + merge git reset HEAD~10 # git fetch origin master # 如果觉得自己的代码足够新可以跳过 git merge origin/maste   上面的 merge 会使用 Fast-forward 模式,不会产生一个 merge commit。只不过哪个 reset HEAD~10 有点不靠谱,也许这个分支非常脏,HEAD~10 也是脏的。如果要完美地 reset,可能还需要用上 merge-base 之类的,那就太麻烦了。
  其实 reset 命令本来就可以用于跳到某个 commit,根本不用 reset 那么麻烦。比如我们可以这么做 # git fetch origin master # 如果觉得自己的代码足够新可以跳过 git reset origin/master --hard   直接把当前分支的 HEAD 强行设置到 origin/master 所在的 commit 上,一步搞定。当然如果觉得 origin/master 不够新可以先 fetch 一次。又或者如果自己已经知道自己的 origin/master 不够新,那就干脆不从它上面开分支了?直接从主仓库的主分支开出一个新分支也是可以的 git fetch origin master:xxx git checkout xxx
网名:
3.80.55.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^