1、代码提交流程1) 本地修改代码后,执行以下命令: git status //查看本地修改状态 git add . //这里只能暂存当前目录内所有修改的文件。如果路径是../../../******这类文件是无法用add ,添加到暂存区的 git commit -m "JIRA: DAP-7008 修复storm升级配置问题" //本地提交,标红部分与jira相关联 git pull --rebase //可能代码冲突 如果冲突,本地解决冲突代码(intellij的changs页面可以直观看出冲突部分),再运行下面两步:1、git add . 2、git rebase --continue (其中git add . 和git commit -m "********" 可以合并成一个命令: git commit -am "*******") 2) git push origin HEAD:refs/for/develop 说明:推送代码到远端库,并发起review------------------------(push成功—》等待submit----结果merge或者merge conflict–>merge成功进入develop分支仓库,冲突停留。) 3)reviewer并打分,如果负分,如下图:
代码提交人修改代码后,重新提交,命令如下: $ git add . $git commit --amend $git push origin HEAD:refs/for/develop 3) 触发到develop-verify分支构建,查看本次提交的编译状态 4) submit前,确认提交develop-verify通过后方可submit,如下图:
5) submit 6) 触发develop分支构建
实例:遇到冲突的情况 A、别人的代码已经submit的情况。 1、git add . 2、git commit -m "***********" 3、git pull --rebase (出现冲突,红色框提示冲突的文件。同时提示用户需要先解决这个冲突,然后用git rebase --continue继续) 4、本地intellij解决冲突(冲突前的代码,会同时存在你和远端的代码),可以git status查看你当前处在REBASE的分支下。 5、git add . 6、git rebase --continue 7、git push origin HEAD:refs/for/develop 如果你直接是1,2,7三步提交到gerrit上,gerrit上就会出现如下提示冲突:merge conflict 使用第3、4、5、6、7步解决冲突以后,gerrit上的合并冲突字样就会消失,此时就可以submit了。
B、如果别人的代码和你一样都仅仅是push到gerrit上,还没有submit。此时,就看submit权限的童鞋优先提交哪一份了,剩下的那个代码即gerrit上提示冲突。同上解决方式。 2、放弃本地所有未commit的修改,得到干净的工作区1)git status 2)git clean -fd 3)git checkout . 3、放弃本地已经commit的修改1)查找到需要回退点 2)git reset HEAD~3 --hard #回退到19faf20 3)git log --pretty=oneline 4、目录太长解决办法git config --global core.longpaths true 5、error: You have not concluded your merge (MERGE_HEAD exists) git拉取失败本地代码commit了,但无法push,发现git上现在不是最新版本,于是就想pull拉取最新版本 错误可能是因为在你以前pull下来的代码没有自动合并导致的. 有2个解决办法: 1.保留你本地的修改 git merge --abort git reset --merge 合并后记得一定要提交这个本地的合并 然后在获取线上仓库 git pull
2.down下线上代码版本,抛弃本地的修改 不建议这样做,但是如果你本地修改不大,或者自己有一份备份留存,可以直接用线上最新版本覆盖到本地 git fetch --all git reset --hard origin/master git fetch 其中git fetch 只是下载远程的库的内容,不做任何的合并git reset 把HEAD指向刚刚下载的最新的版本 6、 网上git图解
7、 代码冲突问题复现以及解决过程:7.1 问题复现: git add 文件a 问题解决: 7.2 git checkout 命令使用方法 例如:git checkout src/com/Android/.../xxx.Java 2)比如修改的都是java文件,不必一个个撤销,可以使用: checkout *.java 3) 撤销所有修改: checkout . 7.3 git revert 命令使用方法 撤销某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销 8、 强制放弃本地的所有修改内容,完全用远程版本develop来同步本地代码:
git reset --hard ORIGIN/develop 9.1、ERROR: missing Change-Id in commit message footer解决方法:git在每个人做过修改之后都要提交到远程的git服务器上,但是为了便于统一管理或者少出错,中间添加了一道审核程序(在本地和远程服务器之间还有一道“防火墙”),每次提交(commit)都需要产生一个id以便区分不同的提交,这个id的产生是使用一段脚本控制的:scp -p -P 29418 [email protected]:hooks/commit-msg ${gitdir}/hooks/。(注:脚本只是为了生成id,注意红色部分每个人不一样) 一定要在提交(commit)之间使用(运行)该脚本生成一个id,然后再次进行推送。如果已经提交(commit)了,就使用git reset HEAD~1,回退到上次提交之前,然后引入控制脚本(钩子)。 a、commit以后,push出错。git log查看没有Changer-Id(注意红色的脚本语句,后面要用到),注意右侧图最后一次提没有Chang-Id b、git reset回退上一次commit提交到暂存区。 c、执行git push的时候的出错提示语句 d、再执行git commit,此时就有Change-Id了,就可以继续git push等 9.2、ERROR: missing Change-Id in commit message footer还有一种经常发生的情况是:报了上述没有Change-Id的错误,但实际上,git log的时候是有Change-Id。 解决方法:1、执行git pull --rebase -------------git pull --rebase表示把你的本地当前分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中), 然后 把本地当前分支更新为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上 2、 然后再执行git push origin HEAD:refs/for/develop 10、拉出另一个分支以后,同步合入直接用gerrit页面操作,同步合入release分支,更方便一点。例如当前是develop分支,另一个分支是release/7.2.1 1、本地develop分支修改并提交以后,在gerrit页面Cherry Pick选择到release/7.2.1分支即可。 2、可以发现changs里面会裂变出另一个分支的提交记录。
利用上面的Cherry Pick到另一个分支,只能一个个commit的操作。如果是想将当前develop的分支所有内容一起merge到另一个分支。需要如下操作: 把远端release分支先checkout一下,再用git merge release/7.2.1。如果不checkout,则用全分支名称命令:git merge origin/release/7.2.1。对某些只需要合入release分支的需求,则必须checkout release分支的。
10.1、删除分支 git branch -D 分支名 11、git 提交不能提交空目录,如果maven编译打包涉及到必要的空目录,要注意可能会失败。12、git 重命名文件名称时,仅仅修改大小写字母,无法提交成功。原因:默认情况下,git大小写不敏感。修改方式如下,git命令执行下面命令: git config --global core.ignorecase false 之后再用git config --list,查看一下core.ignorecase是不是已经被修改成false了。如果没有,可能是–global命令不行,去掉这个命令即可。 13、git stash的用法 适用场景:当前工作区内容已被修改,但是并未完成,还不能提交,但是bug单来了,需要优先解决。或者需要转到其他分支上进行一些工作。或者只是单纯的想git pull最新代码,也可以先存本地修改。 git stash: 备份当前的工作区的内容,从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。 注意点: 1、git stash是将你当前的工作区和暂存区的修改都备份到栈中。 2、如果你需要一次从栈中获取累计的多次备份。 用git stash list查看栈中记录。用git stash apply stash${index}回退出你需要的最近的index次备份。----------------也会存在冲突风险。
14、git pull的时候遇到 Unlink of file ‘.git/objects/pack/pack-***.pack‘ failed. Should I try again? (y/n) y 重新打开git命令窗口,运行一下命令:git gc --auto。然后再继续git pull即可 15、本地新增一些文件,push后又通过git reset HEAD~1 --hard 回退,本地文件也找不到的解决办法 通过git reflog找到原来提交的上一次提交的id,通过git reset id号 可以找回本地文件 15. 提交预览amend方法 git add . git commit --amend git push origin HEAD:refs/for/develop 16.拉新分支(目前测试,只有submit的权限有git push远端分支) git checkout -b localbranchname git push origin localbranchname:remotebranchname 另外:git push origin :remotebranchname ----(推送的时候,本地分支留空,就是删除远端分支意思) 17、不同分支之前merge release/8.4.1 merge到develop $git checkout release/8.4.1 $git pull $git checkout develop $git pull $git merge release/8.4.1 #如果有冲突则通过手动解决 $git stash $git pull $git stash pop #执行提交操作
18、git cherry-pick 当页面cherry-pick发生冲突时,如果手动cherry-pick?或者想同步合入另一个分支的多个commit? $git reflog ----查询需要同步的commit $git checkout release/8.4.1 ----checkout到需要同步的分支 $git cherry-pick commitId ----执行cherry-pick命令 此处支持,多个间断的commitId(空格)以及连续的commitId(..)提交。 如果出现冲突,解决冲突,然后: $git add . $git cherry-pick --continue $git push origin HEAD:refs/for/release/8.4.1
|