Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何消除gerrit中的错误依赖关系_Git_Gerrit - Fatal编程技术网

Git 如何消除gerrit中的错误依赖关系

Git 如何消除gerrit中的错误依赖关系,git,gerrit,Git,Gerrit,在使用gerrit时,默认情况下,所有更改都取决于上一个更改。我不为新的更改进行分支,我只是从主分支开始工作,然后将提交的更改推送到远程源/主分支。每次都会创建一个依赖项,即使两个提交彼此无关 我遇到了一些问题,这让我觉得我没有正确地将git与gerrit结合使用 在我的git/gerrit工作流中,如果每次提交都不依赖于上一次提交,那么会发生什么不同的情况?我还尝试为更改创建一个新分支: > git pull origin master > git checkout -b new_

在使用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
>git拉入原始主机
>git签出-b新_分行
>#改变一下
>git添加-A
>git commit#带有gerrit的提交挂钩。git/hooks
>git推送原点:refs/for/master

这是可行的,但是gerrit仍然报告对以前提交的项目的依赖关系。

这就是
gerrit所说的依赖关系的意思-一个在另一个提交之上的提交。如果两者都在审查中,新的取决于旧的

如果不希望它们相互依赖,请不要在彼此之上创建提交。创建一个提交,然后为下一个提交基于master创建一个新分支

(git签出来源/主-b新分支机构名称)


当你把第二个提交推上查看时,它的父级已经发布了,它将不依赖任何东西。

我被教导通过在每次推git之后执行
git reset--hard HEAD~1
来绕过这个问题,我使用它作为
git reset--hard HEAD~1
的一个变体:

git reset --hard origin/master
假设,我正在
master
中工作,以便进行快速更改

否则,最好在主题分支中工作

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

  • git创建分支

我肯定还有其他人。

我甚至不知道你在问什么。你所说的“依赖性”是什么意思?Gerrit显示了哪些问题依赖于/的依赖性。例如,我将第1期签入gerrit,然后签入一个完全不同的第2期,它甚至不涉及同一个文件。Gerrit报告说#2依赖于#1。这似乎是错误的。使用git rebase-i并自己删除依赖项也可以是摆脱依赖项的一种方法。我看到有人提到每次代码更改都要进行分支。。。但正如我编辑的问题一样,这似乎仍然产生相同的结果。还有什么想法吗?您用来创建分支的命令(git checkout-b new_branch)使新分支位于当前提交之上。您希望重置回服务器视为当前提交的内容,因此请在checkout命令中指定。git checkout origin/master-b new_branch.@Brad您的评论很有意义。我只是想指出,git checkout的文档的起点是最后一个参数:git checkout[-q][f][m][-b |-b |-b |-孤儿]][],因此您的示例是:git checkout-b new|u branch origin/masterHey@Plazgoth,-b是一个标志,就像-f,-q和。这些标志的顺序并不重要,所以上面的例子很好用——如果你不相信我,试试看:)我知道它是有效的。将起点放在标志之前似乎不太常见。您是否愿意评论一下为什么您认为这是错误的,以避免错误信息持续存在,并更好地通知我?这种方法的问题是,在您推动之后,您完全摆脱了提交。比如说,您对gerrit进行了迭代审查,您可能希望根据评论更改以前的提交。这种方法需要您再次从gerrit那里挑选更改,以便能够处理它。我发现,在我分支进行大型修复并在代码上运行安装程序的情况下,这很困难。如果我想在同一代码行上推送一个次要的独立修复程序,我不想丢失这个次要修复程序的主要提交,因为这可能会吸引更多基于评论的更改。这根本不是问题。所有已推送的提交都存储在服务器上和本地。你先做一个,推它,然后再做另一个。当你收到一个反馈并想再次修改它时,你只需检查它就可以了。在上面加上一个分支名称是一种方便,仅此而已。当我在大型回购中工作时(这需要很长时间才能结帐,甚至有各种子模块),我使用多个分支,而不是分支。他们都使用分离的头,我只是在完成后删除目录。对于分支,我发现名称空间变得非常混乱。对于工作树,它们都在我面前,我使用普通的文件系统工具来管理它们。。。因为上面的命令给出了错误,并且在给出了空间后工作——并且很努力