Q1:如何解决冲突/避免冲突

A1:执行git fetch之后,本地可能会存在冲突。

如果希望合并本地修改内容,需要执行git merge。不过当有修改内容未提交时,不能merge,要么把修改内容提交,要么恢复修改。

当执行git merge之后有冲突,并且不能自动合并,需要手工编辑文件解决冲突,再执行git add和git commit。可以利用git status查看冲突的文件名。用远程版本内容替换本地修改内容可以避免冲突(本地修改将被覆盖),

1、对于未提交的修改: git checkout HEAD <path>

2、对于已提交的修改:git reset --hard HEAD 还原至上一个提交

Q2:如何撤销操作

A2:(不适用于已经push成功)

1、修复未提交文件中的错误

如果工作区已经被改成一团乱麻,但是文件还未提交,可以通过以下方法撤销,让工作区回到上次提交时的状态。

(1)git reset --hard HEAD

重置工作区和暂存区,自从上次提交以来在工作区的任何修改都被丢弃。

(2)git checkout HEAD <path>

用HEAD指向的分支中的全部或部分文件替换暂存区以及工作区的文件。不仅会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。

(3)git checkout --<path>

用暂存区全部或指定的文件替换工作区的文件,清除工作区中未添加到暂存区的改动。

2、修改已提交文件中的错误

(1)修改旧提交

如果刚刚做了某个提交(commit),但是马上又想修改这个提交,使用

git commit --amend

这个只能修改最近一次的提交,也就是用一个新的提交来覆盖上一次的提交。

(2)撤销旧提交

git revert HEAD

要求工作区是干净的,与指定commit中的文件无冲突

Q3:没有Change-Id,执行git push origin HEAD:refs/for/master之后,提示ERROR:missing Change-Id in commit message footer

A3:错误原因:提交记录中缺少Change-Id。(Change-Id是通过钩子脚本自动生成的评审单号)

解决办法:

1、执行git pull --rebase,若与本地代码有冲突,请先解决冲突。

2、执行git log查看自己的这次提交中是否有“Change-Id”这样的字符。如果已经存在,则直接执行第3步,否则在当前代码的根目录下执行:

scp -p -P 29418 8位工号@gerrit.xxx.com.cn:hooks/commit-msg .git/hooks/

然后再git commit --amend可以不修改任何东西,保存退出。这时git log 就可以看到Change-Id了。

3、执行git push origin HEAD:refs/for/master 再次推送即可。

Q4:评审单显示”Merge Conflict”

A4:解决办法有三种:

方法一 (推荐)

1.本地执行git pull --rebase

2.手动编辑冲突的文件,解决冲突

3.git add 冲突的文件

4.git rebase --continue

5.git push origin HEAD:refs/for/master

注意:上面步骤中解决完冲突后,git add,git rebase --continue后就直接git push了,不要执行git commit。

执行git pull --rebase 时,本地必须没有未commit 的代码。执行git status -uno可以看到修改但未提交的文件 ,根据需要可以commit,或者暂存,或者git checkout – 文件名 取消修改。然后再重新执行git pull --rebase 。

方法二:

适用于修改代码比较少时,备份自己的代码。

1.登陆gerrit网页上,把该评审单点击"Abandon"废弃掉。

2. git reset --hard  HEAD^^^^^^^   回退到自己提交之前的版本,建议多写几个^,一个^表示回退一次。

3. git pull   更新代码,使其和库里一致。

4.本地重新修改,提交新的评审。

方法三:

1.冲突时想用别人的代码覆盖本地代码

git checkout --theirs <filename>

2.冲突时想用本地代码覆盖别人的代码

git checkout --ours <filename>

3.冲突内容有交叉,想要一部分本地的,一部分别人的

git checkout --merge <filename>

Q5:评审不通过

A5:分三种情景操作,详情如下:

情景1.从提交了上次评审后,本地没做任何修改,也没更新过代码

这种情况最简单,git log看到的最近一次提交,应该就是评审不通过的这次,这时按照评审意见修改代码,修改好了之后,执行如下命令

git add

git commit --amend    //一定要带着--amend

git push origin HEAD:refs/for/自己分支名

此时登陆gerrit上会看到原先自己评审不通过的评审单,状态已经更新,可以让评审员再次评审打分。

情景2:从上次提交了评审后,本地代码更新过,但没有自己新修改的代码。

此时git log看到的最近一次提交已经不是自己的了,这时需要git reset --hard回退到自己修改的那次提交,再修改。

例如:

git log看到如下记录:

commit3 :12b5a45

commit2: 8213017          //commit2这次提交是没有评审通过,需要修改的

commit1: 941ba2b

这时执行git reset --hard 8213017 就可以回退到自己的这次提交。

此时再git log看到的是:

commit2: 8213017          //commit2这次提交是没有评审通过,需要修改的

commit1: 941ba2b

此时再按照情景1的步骤操作。

情景3:从上次提交评审后,本地做了新的修改,提交。

此时需要把自己新修改的代码备份出来。

然后按照情景2的方法进行操作。

------20191203闪

Git操作时遇到的一些问题和相应的处理方式的更多相关文章

  1. git操作笔记

    首先本文参考廖雪峰的git学习教程,写的非常好,值得学习. http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b80 ...

  2. 关于git 操作

    一. Git 命令初识 在正式介绍Git命令之前,先介绍一下Git 的基本命令和操作,对Git命令有一个总体的认识 示例:从Git 版本库的初始化,通常有两种方式: 1)git clone:这是一种较 ...

  3. Git 操作 学习资源 网址

    用git 有一段时间了,有点自己的小心得.个人觉得相对SVN来讲他更灵活,更合理. 陆陆续续的收集了一些学习资源: 1.理解Xcode 中的Git 版本控制 http://www.open-open. ...

  4. git操作??

    一直在搞git,但是难度真的很大,我的英语超烂,而申请git账号时全部是英文的,我就拿着翻译有道词典,必应.进行翻译,一个一个单词的往上面打,一张网页能翻译一下午,最后还是不知道应该具体怎么去操作,所 ...

  5. git 操作大全

    Git 以下内容整理自廖雪峰的git教程,主要用于个人方便使用git命令 git忽略已经被纳入版本库的文件 使用 git update-index –-skip-worktree [file] 可以实 ...

  6. Git push 时每次都需要密码的疑惑

    2015.1.13更新: 在本地搭建Git服务器时,也是有每次操作需要密码的情况. 是因为每次做推送动作时,Git需要认证你是好人.所以需要密码. 可以在 /home/username/.ssh/au ...

  7. 使用Git操作GitHub代码入门教程

    GitHub除了网页操作外,还可以借助本地客户端git(或github for windows)来增删修改远程代码.使用Git操作来连接GitHub可以通过Https或SSH方式,使用SSH方式可以免 ...

  8. 设置Git提交时不用输入用户名和密码

    在用git提交时代码至github上时每次都要输入用户名和密码,当提交操作较为频繁时非常不方便,可以按下文中的介绍,设置成提交时不用输入用户名和密码: 1.在当前库下,已经运行过 git remote ...

  9. 转 git操作小结

    UNDER MIT LICENSE. 公司几乎所有的项目都是使用 git 仓库来管理代码,以前对 git 只有些肤浅的了解,每次提交代码或者上线的时候总是会提心吊胆,生怕出现一些未知的问题.经过三个月 ...

随机推荐

  1. Webpack实战(八):教你搞懂webpack如果实现代码分片(code splitting)

    2020年春节已过,本来打算回郑州,却因为新型冠状病毒感染肺炎的疫情公司推迟了上班的时间,我也推迟了去郑州的时间,在家多陪娃几天.以前都是在书房学习写博客,今天比较特殊,抱着电脑,在楼顶晒着太阳,陪着 ...

  2. vux-- Vue.js 移动端 UI 组件库

    1.使用 安装或更新: npm install vux --save npm install vux-loader --save 如果没有安装less: npm install less less-l ...

  3. 谈下slot-scope

    Vue里有个slot插槽的概念,常用的一般是命名的slot和默认的slot, 这里谈下slot-scope,Vue2.6后改成v-slot slot-scope场景是父组件用子组件的数据,但是样式自己 ...

  4. $.getJSON获取json数据失败

    首先简单介绍下 $.ajax  $.get  $.post  $.getJSON 的区别和用法 $.ajax中有一个type属性,专门用来指定是get请求还是post请求的分别对应的就是$.get和$ ...

  5. opencv —— convexHull 寻找并绘制凸包

    凸包的定义: 包含点集 S 所有点的最小凸多边形称为凸包. 凸包绘制原理:Graham 扫描法 首先选择 y 方向上最低的点作为起始点 p0. 然后以 p0 为原点,建立极坐标系,做逆时针极坐标扫描, ...

  6. Centos中Redis的下载编译与安装(超详细)

    场景 NoSQL,泛指非关系型的数据库,NoSQL即Not-Only SQL,它可以作为关系型数据库的良好补充.随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域,非关系数 ...

  7. Java自学-Lambda 聚合操作

    java 集合的聚合操作 步骤 1 : 传统方式与聚合操作方式遍历数据 遍历数据的传统方式就是使用for循环,然后条件判断,最后打印出满足条件的数据 for (Hero h : heros) { if ...

  8. (LNMP) Nginx_PHP_MariaDB

    L用的是Centos7.5以上,主要是NMP三组件的安装记录. 通常会先安装一下依赖: yum install -y pcre-devel zlib-devel openssl-devel 使用yum ...

  9. [HNOI2016]网络 [树链剖分,可删除堆]

    考虑在 |不在| 这条链上的所有点上放上一个 \(x\),删除也是,然后用可删除堆就随便草掉了. // powered by c++11 // by Isaunoya #pragma GCC opti ...

  10. [大数据技术]Kettle从CSV文件读取清洗后到MySQL中文乱码问题

    首先要知道CSV文件的编码格式 然后在文件输入编码选择编码格式, 第二步,在每个转换或者作业的DB连接中选择选项,并添加如下内容: 中文乱码问题得到解决