> 技术文档 > git小乌龟提交部分自己代码_tortoisegit提交代码步骤

git小乌龟提交部分自己代码_tortoisegit提交代码步骤

以下是使用 Git 小乌龟(TortoiseGit)将本地提交变基(rebase)到主分支的完整步骤指南:


1. 确保工作目录干净

  • 提交或暂存所有本地更改(避免变基冲突
  • 右键工作目录 → TortoiseGit检查修改 → 提交未提交的更改

2. 同步最新主分支代码

  1. 右键工作目录 → TortoiseGit拉取(Pull)
  2. 确保勾选 变基(Rebase)而非合并 选项#mermaid-svg-WFT93VbUDLJj1o70 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-WFT93VbUDLJj1o70 .error-icon{fill:#552222;}#mermaid-svg-WFT93VbUDLJj1o70 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-WFT93VbUDLJj1o70 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-WFT93VbUDLJj1o70 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-WFT93VbUDLJj1o70 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-WFT93VbUDLJj1o70 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-WFT93VbUDLJj1o70 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-WFT93VbUDLJj1o70 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-WFT93VbUDLJj1o70 .marker.cross{stroke:#333333;}#mermaid-svg-WFT93VbUDLJj1o70 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-WFT93VbUDLJj1o70 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-WFT93VbUDLJj1o70 .cluster-label text{fill:#333;}#mermaid-svg-WFT93VbUDLJj1o70 .cluster-label span{color:#333;}#mermaid-svg-WFT93VbUDLJj1o70 .label text,#mermaid-svg-WFT93VbUDLJj1o70 span{fill:#333;color:#333;}#mermaid-svg-WFT93VbUDLJj1o70 .node rect,#mermaid-svg-WFT93VbUDLJj1o70 .node circle,#mermaid-svg-WFT93VbUDLJj1o70 .node ellipse,#mermaid-svg-WFT93VbUDLJj1o70 .node polygon,#mermaid-svg-WFT93VbUDLJj1o70 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-WFT93VbUDLJj1o70 .node .label{text-align:center;}#mermaid-svg-WFT93VbUDLJj1o70 .node.clickable{cursor:pointer;}#mermaid-svg-WFT93VbUDLJj1o70 .arrowheadPath{fill:#333333;}#mermaid-svg-WFT93VbUDLJj1o70 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-WFT93VbUDLJj1o70 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-WFT93VbUDLJj1o70 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-WFT93VbUDLJj1o70 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-WFT93VbUDLJj1o70 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-WFT93VbUDLJj1o70 .cluster text{fill:#333;}#mermaid-svg-WFT93VbUDLJj1o70 .cluster span{color:#333;}#mermaid-svg-WFT93VbUDLJj1o70 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-WFT93VbUDLJj1o70 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}变基前拉取+变基本地分支origin/main落后同步到最新main

3. 开始变基操作

方法一:通过日志界面
  1. 右键工作目录 → TortoiseGit显示日志
  2. 在日志图中:
    • 选中你的第一个本地提交(右键)
    • 按住 Shift 再选中最后一个提交
  3. 右键选择 变基到 main(或目标分支)
方法二:通过分支菜单
  1. 右键工作目录 → TortoiseGit切换/检出(Switch/Checkout)
  2. 选择 main 分支 → 勾选 变基当前分支到目标分支

4. 解决冲突(如有)

  • 冲突发生时 TortoiseGit 会弹出合并工具:
    <<<<<<>>>>>> your-commit
  • 手动编辑文件解决冲突 → 保存
  • 右键冲突文件 → TortoiseGit已解决

5. 完成变基

  1. 在变基过程中:
    • 使用 继续 按钮推进变基
    • 跳过 当前提交(慎用)
  2. 变基完成后:
    # 强制推送到远程(如果之前已推送过)git push --force-with-lease

关键操作截图指引

步骤 界面位置 选择提交 日志视图 → 按住Ctrl多选 启动变基 右键提交 → “Rebase onto…” 冲突解决 右键文件 → “Edit conflicts”

注意事项

  1. 强制推送风险

    • 仅对个人分支使用 --force-with-lease
    • 共享分支避免强制推送
  2. 变基 vs 合并

    #mermaid-svg-yHBqNbWqDOVmBry9 {font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-yHBqNbWqDOVmBry9 .error-icon{fill:#552222;}#mermaid-svg-yHBqNbWqDOVmBry9 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yHBqNbWqDOVmBry9 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-yHBqNbWqDOVmBry9 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yHBqNbWqDOVmBry9 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yHBqNbWqDOVmBry9 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yHBqNbWqDOVmBry9 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yHBqNbWqDOVmBry9 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yHBqNbWqDOVmBry9 .marker.cross{stroke:#333333;}#mermaid-svg-yHBqNbWqDOVmBry9 svg{font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yHBqNbWqDOVmBry9 .label{font-family:\"trebuchet ms\",verdana,arial,sans-serif;color:#333;}#mermaid-svg-yHBqNbWqDOVmBry9 .cluster-label text{fill:#333;}#mermaid-svg-yHBqNbWqDOVmBry9 .cluster-label span{color:#333;}#mermaid-svg-yHBqNbWqDOVmBry9 .label text,#mermaid-svg-yHBqNbWqDOVmBry9 span{fill:#333;color:#333;}#mermaid-svg-yHBqNbWqDOVmBry9 .node rect,#mermaid-svg-yHBqNbWqDOVmBry9 .node circle,#mermaid-svg-yHBqNbWqDOVmBry9 .node ellipse,#mermaid-svg-yHBqNbWqDOVmBry9 .node polygon,#mermaid-svg-yHBqNbWqDOVmBry9 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yHBqNbWqDOVmBry9 .node .label{text-align:center;}#mermaid-svg-yHBqNbWqDOVmBry9 .node.clickable{cursor:pointer;}#mermaid-svg-yHBqNbWqDOVmBry9 .arrowheadPath{fill:#333333;}#mermaid-svg-yHBqNbWqDOVmBry9 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yHBqNbWqDOVmBry9 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yHBqNbWqDOVmBry9 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-yHBqNbWqDOVmBry9 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-yHBqNbWqDOVmBry9 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yHBqNbWqDOVmBry9 .cluster text{fill:#333;}#mermaid-svg-yHBqNbWqDOVmBry9 .cluster span{color:#333;}#mermaid-svg-yHBqNbWqDOVmBry9 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\"trebuchet ms\",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-yHBqNbWqDOVmBry9 :root{--mermaid-font-family:\"trebuchet ms\",verdana,arial,sans-serif;}线性历史保留完整记录变基更整洁合并更适合团队协作

  3. 备份策略

    • 变基前创建备份分支:
      git branch backup/feature-before-rebase

常见问题解决

Q: 变基后提交历史消失?
A: 使用 git reflog 找回丢失的提交

Q: 误操作中断变基?
A: 执行以下命令恢复:

git rebase --abort

Q: 如何验证变基成功?
A: 执行以下命令检查:

git log --graph --oneline# 应看到你的提交出现在main分支最新提交之后

通过以上步骤,你可以安全地将本地提交变基到更新的主分支上,保持提交历史的线性整洁。对于团队项目,建议提前协调变基操作以避免协作冲突。

这里自己使用Cherry-Pick(精选提交)

以下是 Cherry-Pick(精选提交)的详细图文步骤,使用 TortoiseGit 将指定提交从分支A应用到 master 分支:


📌 使用场景

  • 仅需将分支A的特定提交合并到 master
  • 避免整个分支合并带来的无关修改

🖥️ 图文操作步骤

步骤1:确保工作目录干净
  1. 提交分支A的所有修改:
    • 右键仓库 → Git Commit -> \"分支A\"
      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤2:切换到 master 分支
  1. 右键仓库 → TortoiseGit切换/检出(Switch/Checkout)
  2. 选择 master 分支 → 点击 确定
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤3:打开日志视图
  1. 右键仓库 → TortoiseGit显示日志(Show Log)
  2. 在顶部选择 分支A 查看提交记录
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤4:选择要Cherry-Pick的提交
  1. 在日志列表中 右键单击目标提交
  2. 选择 Cherry-Pick这个提交
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

如需选择多个提交
按住 Ctrl 多选 → 右键 → Cherry-Pick这些提交
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传


步骤5:解决冲突(如有)
  1. 如果出现冲突,TortoiseGit 会弹出提示
  2. 右键冲突文件 → 编辑冲突
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  3. 手动调整代码(保留需要的部分)→ 保存文件
  4. 标记冲突已解决:
    右键文件 → TortoiseGit已解决
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤6:完成Cherry-Pick
  1. 冲突解决后,会自动创建新提交
  2. 在日志中确认新提交已出现在 master 分支
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

步骤7:推送到远程仓库
  1. 右键仓库 → TortoiseGit推送(Push)
  2. 确保只勾选 master 分支 → 点击 确定
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

⚠️ 注意事项

  1. 提交哈希变化:Cherry-Pick 会生成全新的提交(与原提交内容相同但哈希不同)
  2. 依赖关系:如果提交依赖之前的修改,需按顺序Cherry-Pick
  3. 冲突概率:比合并操作更容易出现冲突(需手动解决)

🔍 验证是否成功

  1. 使用 git log --graph --oneline 查看历史:
    * a1b2c3d (master) [Cherry-Pick] 优化登录页面 # 新提交* e4f5g6h 原master提交
  2. 对比文件内容是否与分支A的目标提交一致

通过以上步骤,您已安全地将特定提交应用到 master 分支,而无需合并整个分支A的历史。