为什么 branch gerrit/master 这么落后?
Why is branch gerrit/master so far behind?
每次我使用 git-review
结帐到评论分支时,例如:
j ❯❯❯ git-review -d 5779
Downloading refs/changes/79/5779/1 from gerrit
Switched to branch "review/jezor/5779"
status
命令告诉我我在 gerrit/master
分支上遥遥领先:
j ❯❯❯ git status
On branch review/jezor/5779
Your branch is ahead of 'gerrit/master' by 364 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
所以我检查了 gerrit/master
分支:
j ❯❯❯ git checkout gerrit/master
Note: checking out 'gerrit/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at cb563f2e... Old, old commit from six months ago
然后尝试变基当前 master 并向其推送新更改:
j ❯❯❯ git pull --rebase origin master
From ssh://my.projects.review:29418/some_project
* branch master -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Fast-forwarded HEAD to dcf5ac6807455dcca33e288d830515c6bfe89aa0.
j ❯❯❯ git push origin HEAD:gerrit/master
error: unable to push to unqualified destination: gerrit/master
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'ssh://jezor@my.projects.review:29418/some_project'
...如您所见,未成功。
我和我的团队都不太在意,因为我们已经习惯了。不过,保持存储库干净会很好。我猜测 git-review
脚本中的 this line 是造成此行为的原因(将上游设置为 gerrit/master
而不是 master
)。
为什么这个分支这么落后?
我可以更新吗?
不然能不能彻底去掉?
首先,让我们澄清一下 "master" 和 "gerrit/master" 术语之间的区别:
master = 是名为 master 的本地分支(仅存在于您的本地存储库中),如果您执行 "git commit"、"git merge" 或 "git rebase".
gerrit/master = 是名为 master 的远程分支的本地表示(克隆存储库的每个人都可以访问),每次执行 "git fetch" 命令时都会更新。 "gerrit" 术语指向远程存储库。 "gerrit" 遥控器可能是由 git-review 自动创建的,因为当 "defaultremote" 属性 未在 ".git 中明确定义时,这是默认名称审核" git-审核配置文件。
要检查的事项:
- .git审查文件中的定义
- "git remote -v"命令的结果
- "git remote show gerrit" 和 "git remote show origin" 命令的结果。
每次我使用 git-review
结帐到评论分支时,例如:
j ❯❯❯ git-review -d 5779
Downloading refs/changes/79/5779/1 from gerrit
Switched to branch "review/jezor/5779"
status
命令告诉我我在 gerrit/master
分支上遥遥领先:
j ❯❯❯ git status
On branch review/jezor/5779
Your branch is ahead of 'gerrit/master' by 364 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
所以我检查了 gerrit/master
分支:
j ❯❯❯ git checkout gerrit/master
Note: checking out 'gerrit/master'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at cb563f2e... Old, old commit from six months ago
然后尝试变基当前 master 并向其推送新更改:
j ❯❯❯ git pull --rebase origin master
From ssh://my.projects.review:29418/some_project
* branch master -> FETCH_HEAD
First, rewinding head to replay your work on top of it...
Fast-forwarded HEAD to dcf5ac6807455dcca33e288d830515c6bfe89aa0.
j ❯❯❯ git push origin HEAD:gerrit/master
error: unable to push to unqualified destination: gerrit/master
The destination refspec neither matches an existing ref on the remote nor
begins with refs/, and we are unable to guess a prefix based on the source ref.
error: failed to push some refs to 'ssh://jezor@my.projects.review:29418/some_project'
...如您所见,未成功。
我和我的团队都不太在意,因为我们已经习惯了。不过,保持存储库干净会很好。我猜测 git-review
脚本中的 this line 是造成此行为的原因(将上游设置为 gerrit/master
而不是 master
)。
为什么这个分支这么落后?
我可以更新吗?
不然能不能彻底去掉?
首先,让我们澄清一下 "master" 和 "gerrit/master" 术语之间的区别:
master = 是名为 master 的本地分支(仅存在于您的本地存储库中),如果您执行 "git commit"、"git merge" 或 "git rebase".
gerrit/master = 是名为 master 的远程分支的本地表示(克隆存储库的每个人都可以访问),每次执行 "git fetch" 命令时都会更新。 "gerrit" 术语指向远程存储库。 "gerrit" 遥控器可能是由 git-review 自动创建的,因为当 "defaultremote" 属性 未在 ".git 中明确定义时,这是默认名称审核" git-审核配置文件。
要检查的事项:
- .git审查文件中的定义
- "git remote -v"命令的结果
- "git remote show gerrit" 和 "git remote show origin" 命令的结果。