Git常见问题

1 篇文章 0 订阅

Git常见问题

1.1 Conflicts

  • 情形一:repo sync后从服务器上cherry-pick某笔提交出现conflict如何解决冲突?
From ssh://g3.razerzone.com:29418/platform/packages/apps/Settings
 * branch            refs/changes/38/15038/1 -> FETCH_HEAD
error: could not apply e46293c... Comment:[000A][Auto Test][Settings][8.1.0]Settings caused crash when running script "RCL_settings_recent key_wifi on and off" 200 times.
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' or 'git rm <paths>'
hint: and commit the result with 'git commit'

【分析】

cherry-pick后定位到conflict的位置解决冲突(具体如何解决呢?)

 

  • 情形二:切换到另一分支,cherry-pick一笔提交到该分支上,出现以下报错:

【分析】

报错信息里提供了两种解决方案:

1.解决冲突再继续cherry-pick(拉到本地仓库的patch,工作区也会同时改变?)

2.取消cherry-pick的操作

接着,我尝试在工作区解决冲突,再add到暂存区,执行git cherry-pick --continue,本地仓库就生成了提交记录和提交内容;

最后,git push到ANTIGUA_factory仓库。

 

  • 情形三

出现conflict的原因到底是啥?

 

 

1.2 如果想要撤销本地提交(代码已经push到远程仓库)应该怎么做?

  • 方法一

git reset --soft commitId

撤退到commitId这笔提交,将之前的提交保存到stage中暂存起来,working space的修改依然存在

git reset HEAD file

将修改从暂存区移除,修改仍然存在于工作区。

git checkout file

最终删除。

  • 方法二

git reset --hard commitId

本地仓库回退到commitId这笔提交,清除之前的提交和本地所有修改,工作区和本地仓库共同回退到之前的版本。

注:这个命令要小心操作!!

本地的修改,不会影响远程仓库的提交记录。

 

1.3 cherry-pick到其它分支

  • 基本步骤:
  1. 进入android/kernel/msm-4.9/目录下
  2. repo forall -c "git pull" 遍历所有git仓库,使每个仓库执行git pull
  3. repo forall -c "git checkout -t remotes/origin/ANTIGUA_factory" 遍历所有git仓库,取出ANTIGUA_factory版本
  4. git pull 看在拉分支中有没有谁提交东西
  5. 执行自己在gerrit上的cherry-pick,将这行复制下来直接执行即可
  6. git push origin HEAD:refs/for/ANTIGUA_factory
  7. repo branch 查看当前所在的分支
  • 问题1:如何切回之前的分支(ANTIGUA_dev)?

重复执行步骤3(使本地和远程同分支?)

  • 问题2:切到某个分支,是否代码也会同步过去?

A分支上如果本地有修改(属于A的修改),必须checkout或者放到暂存区再切换到B分支,否则无法切换?

A分支上虽然有修改,但切换到B分支上,修改不会存在?

 

 

 

 

                        

 

 

1.4 有两个git账号,如何本地切换使用?

  • 分析

因为一个git账号对应一个repo,一个账号对应一个服务器,下载该服务器的代码都是用该git账号。如果要切换账号,覆盖git?

 

  • References

https://happy123.me/blog/2014/12/07/duo-ge-gitzhang-hao-zhi-jian-de-qie-huan/

 

 

1.5 dev上修改了文件a,factory分支上没有文件a

  • 出现的问题

factory分支上生成了delete的记录,好奇怪!!!为什么单独拉下来的factory分支没有其它资源文件?!

  • 尝试

add delete的记录,再checkout,本地竟然生成了这个文件a。(被delete的,checkout之后本地就生成文件a了)

  • 思考

尽量不要使用git cherry-pick,这个鬼东西到底怎么用啊。。先拉两套代码,把事情做了。有时间好好研究一下git。逃避不了的,加油!弄懂了就容易了!!!

 

1.6 git pull和git pull --rebase的区别

确保本地代码最新、无冲突

 

1.7 git reset 

  • git reset --soft [commit-id]

本地仓库重置到[commit-id]这一笔,之前版本的提交回到暂存区,本地的修改也没有变;

该命令适用的情形

1.更换commit信息(追加commit信息,可以直接在某笔提交上git add,git commit --amend)

2.排查之前版本提交是否有问题

 

  • git reset --hard [commit-id]

本地仓库和工作区同时回退到[commit-id]这一笔;

如果工作区有修改,执行完该命令后,修改会被舍弃;

可以通过git fetch将之前提交到gerrit上的修改拉到本地仓库(本地仓库和工作区好像都变了。。),配套使用。

  • 使用技巧

git reset --hard 到版本commit 111

git reset --soft到版本commit 123

【分析】

这时,本地仓库重置到commit 123,但是工作区有commit111和commit 123两个修改。也就是说,虽然重置到commit123,但是版本commit111的修改会被先放到暂存区。

注:该技巧适用于排查commit111上的修改。

 

 

 

 

  • git fetch

常见错误

error: Your local changes to the following files would be overwritten by merge:
    src/com/android/settings/datausage/DataUsageSummary.java
Please, commit your changes or stash them before you can merge.
Aborting

分析:工作区有修改,无法直接git fetch,需要提交或者舍弃。

 

1.8 git pull --rebase或者repo sync后,本地仍有没有被merge的提交(之前本地的提交)

 

1.9 保存工作区的修改,更新代码

git stash

git apply

 

1.10 merge的顺序

一般来说,提交的顺序和merge的顺序是一样的,根据gerritId递增的顺序就可以merge;
但是,如果后面有不同人的修改互相依赖(比如,),那么就不能简单参考gerrit id的顺序,要参考commit id和parent id,也可以参考Related Changes.

 

1.11 commit xxx is a merge but no -m option was given问题解决

git cherry-pick -m 1 xxxxxxx

 

https://blog.csdn.net/zhang197093/article/details/105164912/

 

1.12 不能正常提交的情况

1. 基于某一笔提交,该提交刚刚merge,gerrit被close,不能提了?

! [remote rejected] HEAD -> refs/for/odm/hq/android/q-huaihe-pdx-212-somc (change http://review.sonyericsson.net/2411951 closed)

1.13 将某个历史版本 checkout 到工作区

首先说明,这样做会产生一个分离的 HEAD 指针,所以个人不推荐这么做。

如果我们工作在 master 分支上,希望 checkout 到 dev 分支上,我们会这么做:

git checkout dev

这里 dev 实际上是一个指针的别名,其本质也是一个 SHA1 散列值。所以,我们很自然地可以用

git checkout <sha1-of-a-commit>

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Git是一个非常流行的版本控制系统,但有时候在使用中会出现错误。下面是一些常见Git错误代码以及解决办法: 1. 错误代码:fatal: refusing to merge unrelated histories 解决办法:在执行git pull命令时添加--allow-unrelated-histories参数,即git pull origin master --allow-unrelated-histories 2. 错误代码:error: failed to push some refs to 'git@github.com:XXX/XXX.git' 解决办法:先执行git pull命令更新本地代码,再执行git push命令推送代码 3. 错误代码:fatal: not a git repository (or any of the parent directories): .git 解决办法:进入正确的git仓库目录 4. 错误代码:fatal: unable to access 'https://github.com/XXX/XXX.git/': OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 解决办法:检查网络连接,或者将https改为ssh协议,即git@github.com:XXX/XXX.git 5. 错误代码:error: Your local changes to the following files would be overwritten by merge 解决办法:先执行git stash命令,将本地修改保存起来,再执行git pull命令更新代码,最后执行git stash pop命令恢复本地修改 6. 错误代码:fatal: the remote end hung up unexpectedly 解决办法:检查网络连接,或者将git缓存设置为最大值,即git config --global http.postBuffer 524288000 7. 错误代码:error: pathspec 'XXX' did not match any file(s) known to git 解决办法:检查输入的文件名是否正确,或者执行git add命令添加文件 这些是常见Git错误代码和解决办法,希望能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值