8

我知道对于主分支上的所有提交是否应该使项目处于有效的工作状态,存在各种意见和理念。我不是在征求这些意见。

为了争论,让我们假设在master分支历史的某个地方,我确定了一个实际上是正在进行的提交的提交,即它没有构建或者它破坏了其他东西。由于我们讨论的是 master 分支中的历史记录,因此变基或修改(或任何实际更改提交的内容)不是一种选择。

为了警告其他开发人员并使自动 git bisect 脚本更容易跳过此提交,我想以某种方式将此提交标记为进行中。我该怎么做呢?

我曾考虑过使用git tag,但是由于标签必须是唯一的,因此您最终会使用像这样的标签wip/<some_unique_id>,在我看来这是一个丑陋的黑客。此外,从概念上讲,我们不想将此提交视为标记提交,即我们可能永远不想检查它,我们可能不希望它出现在标记提交点列表等中。

4

3 回答 3

10

用于git notes在不触及其提交哈希的情况下向某些提交添加注释。

如果您想使用注释HEAD~5进行注释,请执行

git notes add HEAD~5 -m "better don't use this commit. It breaks the build"

发布您的笔记

git push origin refs/notes/*

阅读ProGit了解更多详情。

于 2016-01-18T10:42:04.307 回答
2

另一方面,只是为了给对话带来良好的实践,我想说的是,你不能重新设置或修改的描述的情况,master永远不应该发生。合并到共享分支(master,develop等)上的每个提交都应该始终是稳定的。我看不出有任何理由解释为什么 WIP 提交不能在专用分支上。

例如,在一种更可取的方法中,您将:

git checkout -b hotfix-branch
git add .
git commit -m "[wip] Fixing index route access"
git push origin wip-branch

然后,完成工作后:

git commit --amend  # Let's reword to "[hotfix] Fixed index route access"
git push origin hotfix-branch --force
git checkout master
git merge hotfix-branch  # Fast-forward or not, etc., whatever
git push origin master
git push --delete origin hotfix-branch
git branch -d hotfix-branch

在这个例子中(当然可以改进,这不是重点),如果需要,amend可以用一些fixup/替换autosquash,但你得到了画。重点是在专用分支上工作,使用 Git 通过 WIP 提交保存不稳定状态,然后在合并到共享分支之前重写历史记录以保持git log清洁。

正如您所说,永远不应该在共享分支上重写历史。这就是为什么您不想让自己处于甚至可能会想到这种事情的境地。始终在重写历史无关紧要的专用分支上工作,并在共享分支上合并干净和稳定的提交。(:

于 2018-05-03T15:14:11.880 回答
1

我从未听说过这样的功能,所以我创建了它:

# Commit current work as wip so that I can switch branch
function gitwip {
    git add -A && git commit -m wip
}

# Reset last commit if it is a work in progress
function gitrwip {
   lastCommitMessage=`git log --oneline -n1 | awk '{$1= ""; print $0}'`
   lastCommitMessage=${lastCommitMessage:1:30}
   [ "$lastCommitMessage" = wip ] && git reset HEAD~1 || echo "#$lastCommitMessage#[...]" is not a wip commit
}

如果最后一次提交不是提交,该gitwip功能会阻止我执行。git reset HEAD~1wip

于 2017-05-19T13:15:43.463 回答