Git个人开发建议

下面我把推荐的工作流 + 为什么这么做 + 一套你可以直接复制粘贴到终端的命令都写清楚,并给出两种把 dev2.0 的 bug 修复带到你新需求分支的方法(merge 和 rebase),说明优缺点,最后给一些小建议和常见处理办法。

推荐总体思路(简短)

把 dev2.0 当作你当前的「主开发」分支(你现在已经在它上面做主要工作)。

为新需求创建一个长期 feature 分支,例如 feature/new-xxx,在该分支上持续提交、推送(远端备份)。

若中途发现 bug,基于 dev2.0 修复并推到远端(或直接在 dev2.0 提交并推送),修复发布后再把 dev2.0 的最新变更合并(或 rebase)到你的 feature 分支继续开发。

feature 开发完毕后把它合并回 dev2.0(可以普通 merge 或 squash merge),然后删除 feature 分支。

这种方式优点:主线 dev2.0 保持可用,feature 独立开发,远端有备份;缺点:如果长期不合并,可能会有冲突,但冲突可通过定期同步解决。

具体命令(一步步示例)

假设远端名字是 origin,主开发分支是 dev2.0,你要新建 feature/my-long-work。

1) 从最新的 dev2.0 创建 feature 分支

git fetch origin

git switch dev2.0

git pull origin dev2.0          # 保证本地 dev2.0 是最新git switch -c feature/my-long-work# 开始开发,频繁 commitgit add .

git commit -m "feat: start feature my-long-work"# 第一次把分支推到远端并关联 upstreamgit push -u origin feature/my-long-work

2) 中途需要修复 bug(你想在 dev2.0 上修)

git switch dev2.0

git pull origin dev2.0# 做修复、测试git add .

git commit -m "fix: crash in X when Y is nil"git push origin dev2.0

说明:你也可以从 dev2.0 创建一个短期 fix/xxx 分支来修复(更干净),然后 PR 或直接合并回 dev2.0。例如:

git switch dev2.0

git pull origin dev2.0

git switch -c fix/urgent-bug# 修复 -> commitgit push -u origin fix/urgent-bug# 在远端合并 fix/urgent-bug -> dev2.0(或本地 merge 后 push)

3) 把 dev2.0 的修复带到你的 feature 分支(两种方式)

方式 A — merge(安全、简单)

git switch feature/my-long-work

git fetch origin

git merge origin/dev2.0# 处理冲突(若有):编辑冲突文件 -> git add <file> -> git commitgit push

优点:不会改写提交历史;操作直观。

缺点:历史会有额外的 merge commit,长期下来日志比较“脏”。

方式 B — rebase(历史更干净,个人分支推荐)

git switch feature/my-long-work

git fetch origin

git rebase origin/dev2.0# 若发生冲突:编辑冲突文件 -> git add <file> -> git rebase --continue# 若想中止 rebase:git rebase --abort# 完成后需要强推到远端(因为你改写了历史)git push --force-with-lease

优点:提交历史线性、清爽;合并到 dev2.0 时更干净。

缺点:改写历史,需要理解冲突处理与 force-with-lease 的风险。对只你个人的 feature 分支,这种做法是安全且常用的。

推荐:如果你熟悉 rebase,用 rebase;不熟悉或怕改历史,就用 merge。作为个人开发者,两者都可以。

4) feature 完成后合并回 dev2.0

选两种合并策略(在远端仓库也可用 PR):

普通合并(保留分支历史)

git switch dev2.0

git pull origin dev2.0

git merge --no-ff feature/my-long-work  # 产生一个 merge commit,便于回溯git push origin dev2.0# (合并完可以删除 feature 分支)git branch -d feature/my-long-work        # 删除本地git push origin --delete feature/my-long-work  # 删除远端

squash 合并(把 feature 的所有提交合并为一个提交)

在本地:

git switch dev2.0

git pull origin dev2.0

git merge --squash feature/my-long-work

git commit -m "feat: implement my-long-work (squashed)"git push origin dev2.0

或在远端代码托管平台(GitHub/GitLab)上用 “Squash and merge” 按钮。

其他有用命令 / 场景

临时保存工作(想切到别的分支但不想提交):

git stash push -m "WIP my partial changes"git switch dev2.0# 回到 feature 后恢复git switch feature/my-long-work

git stash pop

如果修复很小,也可 cherry-pick 到另一个分支:

# 获取修复提交 hash(例如 abc123)git switch feature/my-long-work

git cherry-pick abc123

查看分支列表:

git branch      # 本地git branch -r    # 远端

小建议(best practices,针对你这种个人长期 feature)

为长期需求建 feature 分支:正如你想的那样,很合理。

频繁 push(远端备份):即使是 WIP,也 push 到远端 feature/...(git push -u origin feature/...),以防电脑挂了或想在别处继续工作。

修复优先在 dev2.0 上做(或者 fix/* 分支再合并回 dev2.0),然后把 dev2.0 的更新合并/rebase 到 feature。

定期同步 dev2.0 到 feature:每天或每当 dev2.0 有重要变更时同步一次,避免一次性冲突太大。

合并时选择策略:想保留 feature 历史用普通 merge;想要干净历史可以 rebase + squash。

使用 descriptive commit messages,便于回溯。

在合并或 force 推之前检查:git fetch && git log origin/branch..HEAD 看下差异;--force-with-lease 比 --force 更安全。

删除不需要的分支:合并后清理本地和远端分支,保持仓库整洁。

总体结论:

你描述的流程(在 dev2.0 上修 bug,另起 feature 分支做长期需求,开发完成后合并)完全可行,并且是推荐做法。关键点在于定期把 dev2.0 的修复合并或 rebase 到 feature 分支,并保持频繁 push 以备份工作。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、配置用户信息: 其实就是在~/.gitconfig里面修改效果一样:[user]name = xxxemail...
    夜gege阅读 3,604评论 0 0
  • 本文会持续记录自己在学习、工作中,接触的和iOS开发相关的各种技术。包括写代码时容易忽视的细节问题,项目中接触到实...
    Bestmer阅读 4,408评论 0 14
  • 廖雪峰的Git教程 一、Git仓库 仓库分为本地仓库和远程仓库,它们通过秘钥和远程仓库地址来建立连接。 A. 创建...
    前端菜篮子阅读 2,224评论 0 0
  • Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理git任何或小或大的项目。 Git 是 Linus To...
    LeoLongl阅读 1,826评论 0 0
  • git常用命令 GIT常用命令备忘:http://stormzhang.com/git/2014/01/27/gi...
    新篇章阅读 12,741评论 1 26