不小心在错误的分支上工作

问题描述 投票:0回答:1

我有一个我知道很常见的工作流程:

  1. 创建功能分支
  2. 做出改变
  3. 添加更改的文件
  4. 承诺
  5. 推送到服务器

但是我总是犯的错误——所有该死的时间! — 是为了 忘记初步步骤:

  1. 位于主分支或其他基础分支上

所以我最终根据我发生的任何随机分支创建了一个分支 当我执行步骤 1 时打开,这是错误的,并且未设置 我希望我的同事在执行第 5 步后审查合并,以及 当然没有设置我最终想要恢复的合并 掌握。今天直到第5步之后我才发现这个错误, 撤消这是一个巨大的麻烦。

所以我有两个问题:

  1. 将自己从这个错误中拯救出来的正确方法是什么——也就是说,将我在步骤 2 中所做的所有工作干净地移动到一个新的分支,它应该在哪里?
  2. 有没有办法从一开始就防止这种错误?

对于问题 1,我怀疑规范的答案是

git rebase
。但我什至不再尝试使用它,部分原因是 这太难思考了,部分原因是它很少起作用 无论如何对我来说。 (我认为失败模式是它抱怨 关于附近任何其他未提交的文件 - 我总是 有这些。)所以我倾向于依靠
git show
git diff
其次是
git apply
,总感觉有点低级 平淡无奇,但至少很容易思考,而且通常有效。

但是我缺少什么吗?还有其他的吗 易于思考、有保证的功能获取方式 树枝并用不同的祖先把它扔下来? (我知道 git filter-branch,但更难思考 关于。)

但是我的另一个问题是,有没有一些好的方法 一开始就回避问题?我正在想象一个警告 每当我尝试创建新分支时都可能会弹出 从 master 以外的其他东西(或某些每个工作树)分支出来 可配置的“默认”分支)。如果这个功能不存在, 我想我可以尝试添加它,因为它会节省我很多 浪费了时间。

git branch rebase
1个回答
0
投票

您的情况是 git 工作流程中的常见问题,最好解决如何从中恢复以及如何在将来预防它。

挽救错误

  1. 从正确的基础创建一个新分支:

首先,从预期的基础分支(例如 master)创建一个新分支。

git checkout master
git pull
git checkout -b new-feature-branch
  1. 精挑细选的变化:

接下来,使用

cherry-pick
将错误创建的分支中的提交应用到新分支。识别您在错误分支上所做的提交(您可以使用
git log
为此)并将它们应用到新分支。

git cherry-pick <commit-sha>

对您要传输的每个提交重复此操作。此方法比 rebase 更简单,并且避免了未提交文件的问题。

  1. 处理未提交的更改:

对于工作目录中任何未提交的更改,请在切换分支之前将其存储并将其应用到新分支中。

git stash
git checkout new-feature-branch
git stash pop

防止错误

  1. Git 挂钩:

如果您不在预期的基础分支上,您可以在 Git 中使用

pre-commit
pre-push
挂钩来警告您。这需要一些脚本编写。

以下是此脚本的基本示例:

#!/bin/sh
intended_base="master"

current_branch=$(git rev-parse --abbrev-ref HEAD)
if [ "$current_branch" != "$intended_base" ]; then
    echo "Warning: You are not on the $intended_base branch."
    exit 1
fi

将此脚本放入存储库中的“.git/hooks/pre-commit”或“.git/hooks/pre-push”文件中,并使其可执行(

chmod +x .git/hooks/pre-commit
)。如果您不在主分支上,这将中止提交或推送。

  1. 定期检查:

养成在开始新工作之前检查当前分支(git 分支或 git 状态)的习惯。虽然这依赖于手动纪律,但这是一个很好的开发实践。

© www.soinside.com 2019 - 2024. All rights reserved.