我已经在Gerrit中提交了一个文件(将其推送),但是不幸的是,我认为我删除了我提交的本地分支。如何解决?请帮忙。
我尝试过
git branch --contains 31436fd7200566967f85bfb1ee5425f9b599b908
但它显示
error: no such commit 31436fd7200566967f85bfb1ee5425f9b599b908
编辑:是的,我已经在本地安装了git,并且在本地工作了该分支。
我已经从Gerrit网站获得了提交ID。
好的,两天前,当我尝试提交更改时出现了一个问题,说A。我尝试使用“ ./logerrit Submit master”提交它,但我得到的只是:
Counting objects: 32, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (32/32), done.
Writing objects: 100% (32/32), 100.46 KiB | 0 bytes/s, done.
Total 32 (delta 22), reused 0 (delta 0)
remote: Resolving deltas: 100% (22/22)
remote: Counting objects: 79789, done
remote: Processing changes: refs: 1, done
To ssh://logerrit/core
! [remote rejected] HEAD -> refs/for/master (change
https://gerrit.libreoffice.org/54112 closed)
error: failed to push some refs to 'ssh://logerrit/core'
因此,它说两次更改的更改ID是相同的-我正在提交的补丁和几天前我已经提交并现在合并的补丁。我试图做所有在堆栈溢出或任何其他博客中提到的可能的事情-我试图更改id,以便在下一个“ git commit --amend” git自动更改id时,它没有用得到相同的错误,我还试图通过删除行<<<<<<<<<<< =============和>>>>>>>>>>来解决冲突。 >但是我对吗?这是解决它的正确方法吗?然后,我尝试“ git rebase master”,然后收到错误消息:
First, rewinding head to replay your work on top of it...
Applying: smartart : test documents
Using index info to reconstruct a base tree...
M sd/qa/unit/import-tests-smartart.cxx
Falling back to patching base and 3-way merge...
Auto-merging sd/qa/unit/import-tests-smartart.cxx
CONFLICT (content): Merge conflict in sd/qa/unit/import-tests-
smartart.cxx
error: Failed to merge in the changes.
Patch failed at 0001 smartart : test documents
The copy of the patch that failed is found in: .git/rebase-
apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
我尝试更改分支,然后尝试再次使用主服务器重新进行更改,因为它已经是最新的了,但这没有用。然后,我“创建了”本地删除了多余的分支,并且由于错误,我可能删除了我承诺使用Gerrit的分支之一。
现在我的问题是:
第一个问题和第二个问题都与不同的文件/分支有关,但是可能彼此相关。
答案 0 :(得分:0)
由于您确定该提交存在于远程服务器上,因此应该可以找到它:
git branch -r --contains 31436fd7200566967f85bfb1ee5425f9b599b908
一旦知道了要提交的远程分支,将其称为<branch>
,那么您应该可以在本地使用以下方式重新创建该分支:
# delete same-named local branch (if it exists)
git branch -D <branch>
# fetch latest branches from remote
git fetch
# checkout branch from remote
git checkout <branch>
致谢:
答案 1 :(得分:0)
忘记提交31436fd7200566967f85bfb1ee5425f9b599b908。如果您确实合并了Gerrit中的提交,则它位于远程分支上。要创建并从远程分支签出本地分支,请执行:
git checkout -b local-branch remotebranch
例如:
git checkout -b my-feature origin/release1.0
答案 2 :(得分:0)
我不知道这是否可以满足您的需求,但是您应该能够从远程重新签出当前的master分支,然后应用您尝试获取的相同更改。除非您有未提及的其他更改,否则这应该为您提供重放更改并继续进行操作所需的一切。
这些步骤将破坏性地删除您的本地主服务器,并从远程还原它:
# delete local master
git branch -D master
# fetch latest branches from remote
git fetch
# checkout master fresh from remote
git checkout master
然后从gitweb资源中手动复制内容:
...成为提交中唯一更改的文件sd/qa/unit/import-tests-smartart.cxx
。
结果是当前主分支已应用您要应用的更改。接下来,我假设您将使用git checkout -b <new-branch>
创建一个新分支或留在master中,然后提交更改。最后,您可以根据需要进行推送。
答案 3 :(得分:0)
使用Gerrit时,最终在存储库中的提交可能与您推送的原始提交具有不同的sha1。发生这种情况有几个原因:
Rebase if Necessary
提交策略,则更改将基于提交重新进行Cherry Pick
策略,并为提交的所有更改创建了一个新的提交。您可以在Gerrit UI中看到实际的提交sha1。确切的位置取决于Gerrit的版本以及使用的UI(GWT或Polymer)。