git——某些应用场景及解决方案

以下是我在开发过程中,遇到过的某些实际的git应用场景以及我的解决方法。

注意几点:

  •     只要不push到服务器上,本地代码随便折腾
  •     没push到服务器上的提交,注意暂存备份
  •     确认push之前,务必检查push命令的用户名、服务器地址、仓库名、分支名
  •     尽量不要abandon已经push的提交
  •     本地编辑之前记得同步代码

场景1

正常commit流程

//查看当前状态
git status
//将修改添加到暂存区
git add xxx 
//查看是否暂存成功
git status 
//提交到本地仓库
git commit 
//push到服务器上
git push xxx 
//同事审核代码
review 
//代码审核没问题,入库
merge 

场景2

将本地修改(my code)push到gerrit上后,经过同事review之后,发现某些地方还需要修改

在本地修改之后
//查看当前状态
git status 
//将修改添加到暂存区
git add xxx 
//查看是否暂存成功
git status 
if(需要修改commit信息) {
	//--amend表示本次修改是最近一次commit的补丁
	git commit --amend 
} else {
	//--no-edit表示延用初次提交的commit信息,不再编辑commit信息
	git commit --amend --no-edit 
}
//push到服务器上,之后会发现gerrit上的my code会多一个patch
git push xxx 
//同事审核代码
review 
//代码审核没问题,入库
merge 

场景3

在本地编辑了代码(my code),正准备提交才想起来,同事刚入库的代码(his code)还没有同步到我的本地。

if(my code和his code有冲突) {
	if(已经commit了) {
		方案一:
			//保留工作空间的修改,并重置暂存区和本地仓库到本次提交前的版本
			git reset HEAD^ 
			//将工作空间的修改暂存到stash中
			git stash 
			//将服务器git仓库同步到本地
			repo sync . 
			//从stash中取出修改到工作空间
			git stash pop 
			git会提示代码有冲突
			解完冲突之后,走正常的提交流程
		方案二:
			//将my code push到gerrit上,gerrit会提示有代码冲突。(这一步权当暂存代码到gerrit上)
			git push xxx 
			//将服务器git仓库同步到本地。
			//注意一定要在reset和push之后同步代码,要不然会在没有任何提示的情况下,冲掉my code
			repo sync . 
			//该条命令要从gerrit上复制过来
			git cherry-pick xxx 
			git会提示代码有冲突
			解完冲突之后执行 git cherry-pick --continue
			发现my code作为最新的提交存到了本地仓库
			//给gerrit上的my code打补丁
			git push xxx 
	} else {
		//将工作空间的修改暂存到stash中
		git stash 
		//将服务器git仓库同步到本地
		repo sync . 
		//从stash中取出修改到工作空间,
		git stash pop 
		git会提示代码有冲突
		解完冲突之后,走正常的提交流程
	}
} else {
	走正常的提交流程。merge之后再同步本地代码。
}

场景4

将本地修改(my code)push到gerrit上后,gerrit提示my code与同事先push到gerrit上的代码(his code)有冲突

等his code入库之后
//将服务器git仓库同步到本地。注意一定要在reset和push之后同步代码,要不然会在没有任何提示的情况下,冲掉my code
repo sync . 
//该条命令可以在gerrit上复制过来
git cherry-pick xxx 
git会提示代码有冲突
解完冲突之后执行 git cherry-pick --continue
发现my code作为最新的提交存到了本地仓库
//给gerrit上的my code打补丁
git push xxx 

场景5

将本地修改(my code1)push到gerrit上后,还没等my code1入库,又push了一笔代码(my code2)到gerrit上,review代码时才发现my code1还需要修改。

//将工作空间和本地仓库重置到my code1之前的一笔提交(在Android studio的git可视化界面上操作更直观)
git reset --hard HEAD^^
cherry-pick my code1到本地
没有冲突的情况下,my code1直接作为最新的提交存到了本地仓库
修改本地代码
//查看当前状态
git status 
//将修改添加到暂存区
git add xxx 
//查看是否暂存成功
git status 
if(需要修改commit信息) {
	//--amend表示本次修改是最近一次commit的补丁
	git commit --amend 
} else {
	//--no-edit表示延用初次提交的commit信息,不再编辑commit信息
	git commit --amend --no-edit 
}
//push到服务器上,之后会发现gerrit上的my code1会多一个patch
git push xxx
继续review,直到my code1没有任何问题

cherry-pick my code2到本地
if(本地没有冲突) {
	my code2直接作为最新的提交存到了本地仓库
} else {
	解完冲突之后执行 git cherry-pick --continue
	发现my code2作为最新的提交存到了本地仓库
	//给gerrit上的my code2打补丁
	git push xxx 
}


 

猜你喜欢

转载自blog.csdn.net/qq_38861828/article/details/108043690