我习惯于使用单个存储库的git
。然而,最近我开始接触Android开发并尝试理解repo
。我通过在.repo/local_manifests
目录中创建XML文件来设置一些自定义的git存储库(我正在使用repo 1.19),并且repo sync
正常工作。
当我查看这些自定义git存储库时,它们显示为# Not currently on any branch.
。这看起来就像我使用命令git checkout abcd1234
(检出提交abcd1234)而不是git checkout origin/master
时的情况类似。至于如何进行更改,我不确定如何推回到原始版本。这是我的普通git工作流程。
git checkout origin/master
#make changes to working directory
git add .
git commit -m 'useful message'
#assume time has passed and there could be changes upstream
git fetch
git rebase origin/master
git push origin master
现在我不再处于一个分支上,我该如何推送更改?我知道有一个工具叫做repo upload
,但我不太确定它是如何工作的。虽然我从未使用过Gerrit,但也许值得设置它,这样其他团队成员就可以在代码推送到Github之前审核代码。老实说,我对repo
和Gerrit
仍然有非常抽象的理解。
git commit
进行更改并稍后使用repo sync
更新时,会发生什么?repo
会执行git merge
,git rebase
,更改会丢失还是其他操作? - redbmkrepo sync
命令,您不应该会丢失本地修改。如果分支正在跟踪,则根据repo
版本的不同,它可能会尝试执行git pull --rebase
或git pull
(实际上执行合并)。我更倾向于通过显式运行git pull --rebase
命令来覆盖这种不确定性,以确保始终进行变基操作。 - mvprepo sync
时感到非常安全。然而,我错过了跟踪分支的部分。如果你不在跟踪分支上,repo sync
将会快乐地丢弃你在分离 HEAD 上的提交,或者留下你的本地分支,并将你的存储库指向清单中“修订版”下列出的 git 提交。至少它有礼貌地在repo sync
命令的末尾列出它们。要轻松地获取它们,请在检出之前运行git reflog
查找它们。对于我的分离 HEAD 提交,快捷方式git checkout HEAD@{1}
很有效。 - remcycles