git小乌龟提交部分自己代码_tortoisegit提交代码步骤
以下是使用 Git 小乌龟(TortoiseGit)将本地提交变基(rebase)到主分支的完整步骤指南:
1. 确保工作目录干净
2. 同步最新主分支代码
- 右键工作目录 → TortoiseGit → 拉取(Pull)
- 确保勾选 变基(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. 开始变基操作
方法一:通过日志界面
- 右键工作目录 → TortoiseGit → 显示日志
- 在日志图中:
- 选中你的第一个本地提交(右键)
- 按住
Shift
再选中最后一个提交
- 右键选择 变基到 main(或目标分支)
方法二:通过分支菜单
- 右键工作目录 → TortoiseGit → 切换/检出(Switch/Checkout)
- 选择 main 分支 → 勾选 变基当前分支到目标分支
4. 解决冲突(如有)
- 冲突发生时 TortoiseGit 会弹出合并工具:
<<<<<<>>>>>> your-commit
- 手动编辑文件解决冲突 → 保存
- 右键冲突文件 → TortoiseGit → 已解决
5. 完成变基
- 在变基过程中:
- 使用 继续 按钮推进变基
- 或 跳过 当前提交(慎用)
- 变基完成后:
# 强制推送到远程(如果之前已推送过)git push --force-with-lease
关键操作截图指引
注意事项
-
强制推送风险:
- 仅对个人分支使用
--force-with-lease
- 共享分支避免强制推送
- 仅对个人分支使用
-
变基 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;}线性历史保留完整记录变基更整洁合并更适合团队协作
-
备份策略:
- 变基前创建备份分支:
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:确保工作目录干净
- 提交分支A的所有修改:
- 右键仓库 →
Git Commit -> \"分支A\"
- 右键仓库 →
步骤2:切换到 master 分支
- 右键仓库 →
TortoiseGit
→切换/检出(Switch/Checkout)
- 选择
master
分支 → 点击 确定
步骤3:打开日志视图
- 右键仓库 →
TortoiseGit
→显示日志(Show Log)
- 在顶部选择 分支A 查看提交记录
步骤4:选择要Cherry-Pick的提交
- 在日志列表中 右键单击目标提交
- 选择
Cherry-Pick这个提交
如需选择多个提交:
按住 Ctrl
多选 → 右键 → Cherry-Pick这些提交
步骤5:解决冲突(如有)
- 如果出现冲突,TortoiseGit 会弹出提示
- 右键冲突文件 →
编辑冲突
- 手动调整代码(保留需要的部分)→ 保存文件
- 标记冲突已解决:
右键文件 →TortoiseGit
→已解决
步骤6:完成Cherry-Pick
- 冲突解决后,会自动创建新提交
- 在日志中确认新提交已出现在 master 分支
步骤7:推送到远程仓库
- 右键仓库 →
TortoiseGit
→推送(Push)
- 确保只勾选 master 分支 → 点击 确定
⚠️ 注意事项
- 提交哈希变化:Cherry-Pick 会生成全新的提交(与原提交内容相同但哈希不同)
- 依赖关系:如果提交依赖之前的修改,需按顺序Cherry-Pick
- 冲突概率:比合并操作更容易出现冲突(需手动解决)
🔍 验证是否成功
- 使用
git log --graph --oneline
查看历史:* a1b2c3d (master) [Cherry-Pick] 优化登录页面 # 新提交* e4f5g6h 原master提交
- 对比文件内容是否与分支A的目标提交一致
通过以上步骤,您已安全地将特定提交应用到 master 分支,而无需合并整个分支A的历史。