问题 如何摆脱格里特的错误依赖


看来,当使用gerrit时,默认情况下所有更改都取决于前一个。我不分支新的更改,我只是在主分支上工作,然后将提交的更改推送到远程源/主服务器。即使两个提交彼此无关,也会每次创建依赖关系。

我遇到了一些问题让我觉得我没有正确使用git与gerrit结合使用。

在我的git / gerrit工作流程中,每次提交都不会依赖于之前的提交会发生什么?我也尝试为更改创建一个新分支:

> git pull origin master
> git checkout -b new_branch
> #make a change
> git add -A
> git commit #with gerrit's commit hook in .git/hooks
> git push origin <sha1>:refs/for/master

这样可行,但gerrit仍然报告依赖于先前提交的项目。


6178
2018-05-01 18:26


起源

我甚至不确定你在问什么。你是什​​么意思“依赖?” - ebneter
Gerrit展示了哪些问题依赖于/依赖。例如,我在问题#1中检查gerrit,然后检查一个完全不同的#2,它甚至没有触及同一个文件。 Gerrit报告称#2依赖于#1。这似乎是错的。 - Shellum
使用git rebase -i并自己删除依赖项也可以是一种摆脱依赖关系的方法。 - cafebabe1991


答案:


这是什么 Gerrit 表示依赖关系 - 在另一个提交之上的提交。如果两者都在审核中,则较新的一个取决于较旧的一个。

如果您不希望它们彼此依赖,请不要在彼此之上创建提交。创建一个提交,然后根据master创建一个新分支,用于下次提交

(git checkout origin/master -b NEW_BRANCH_NAME)

当您推送第二次提交以进行审核时,它的父级已经发布,并且它不依赖于任何内容。


13
2018-05-01 21:36



我已经看到提到每个代码更改的分支...但是在我编辑的问题中,这似乎仍然产生相同的结果。还有什么想法吗? - Shellum
您用于创建分支的命令(git checkout -b new_branch)使新分支位于当前提交之上。您希望重置回服务器查看当前提交的内容 - 因此请在checkout命令中指定。 git checkout 产地/主 -b new_branch。 - Brad
@Brad您的评论很有意义。我只想指出git-checkout的文档有起点作为最后一个参数:git checkout [-q] [-f] [-m] [[-b | -B | --orphan] <new_branch >] [<start_point>]所以你的例子是:git checkout -b new_branch 产地/主 - Plazgoth
嘿@Plazgoth,-b <new_branch>是一个标志,就像-f,-q和<start_point>一样。这些标志的顺序无关紧要,所以上面的例子工作得很好 - 如果你不相信我,试试看:) - Brad
我知道它有效。将起点放在旗帜之前似乎不太常见。 - Plazgoth


我被教导要做到这一点 git reset --hard HEAD~1 每次之后 git push


0
2018-06-07 09:04



您是否想评论为什么您认为这是错误的,或许可以避免使错误信息永久存在并更好地通知我? - Mitch
这种方法的问题是你在推后完全摆脱了提交。比如,您对gerrit进行了迭代评论,您可能希望根据评论更改先前的提交。这种方法需要你再次从gerrit中选择更改,以便能够对其进行处理。我发现这很困难,因为我分支出来进行大修,并在该代码上运行设置。如果我想在同一代码行上推送一个小的独立修复,我不想失去这个小修复的主要提交,因为这可能会根据评论吸引更多的更改。 - angel_007
根本不是问题。已推送的所有提交都存储在服务器和本地。你工作一个,推它,然后你工作另一个。当你得到一个反馈并希望再次修改它时,你只需检查它就可以了。在其上添加分支名称是一种便利,仅此而已。 - clacke
当我在一个大型仓库工作(需要很长时间才能结账,甚至有各种子模块)时,我会使用几个 worktrees 而不是分支。他们都使用分离头,我只是在完成后删除目录。通过分支,我发现命名空间变得非常混乱。使用工作树,它们都在我面前,我使用普通的文件系统工具来管理它们。 - clacke


作为变种 git reset --hard HEAD~1 我改用它:

git reset --hard origin/master

假设,我在工作 master 快速改变。

否则,首选在主题分支中工作。

有许多Git脚本可以帮助管理主题分支:

我确定还有其他人。


0
2018-03-13 14:25



我认为“git reset - hard origin / master”更好......因为上面的命令给出了错误并且在给予空间之后起作用 - 并且很难 - S H