Git指南 - 我经常遇到的那些项目实战场景

此篇记录:在项目中使用Git时,遇到的一些常见场景和解决方式,主要是提升工作效率,很多所谓的问题并不是本身存在的问题,更多想带给大家的是我在项目实战中git的多样性操作…

关联篇

在最早的时期,我将所有对Git的认知都记录在了一篇blog内,后期感觉职责混乱,不太利于查看,所以重新翻一下,分多篇记录

分支相关

那天看到 这里 也统计了挺多分支场景,感觉不错,有兴趣也可以去直接去看,相当于一个 git 文档

本地分支 绑定 远程分支

使用命令 git branch --set-upstream ;示例如下(debug为创建的分支)

Git提示:
 git branch --set-upstream-to=origin/<branch>
 git branch --set-upstream-to=debug(本地分支名称) origin/debug(远程分支名)  

俩者一样,防止误导

Git提示:
 git branch --set-upstream-to=origin/<branchName> 
 git branch --set-upstream-to=本地分支名称/远程分支名  

将本地分支与远程同名分支相关联

 git push -u origin <本地分支名>

基于当前分支创建新分支(本地)

 git checkout master  #切换分支
 git checkout -b newBranch #创建分支
 git push origin newBranch #将新建的分支推到远端
 
 # 常规三件套
 git add . 
 git commit -m "***"
 
 # 介意命令长的话,可以直接绑定对应分支
 git push origin newBranch

本地显示已删除的远程分支(清缓存)

主责:缓存导致

远端分支已不存在,但本地分支依旧可以看到

 #执行以下这行命令
 git remote show origin  

本地查询不到远程全部分支

可结合 - 本地查不到 “某” 远程分支 的 处理方式

 # 已自创本地分支(类似关联操作)
 git fetch <远程主机名> <分支名># 未自创本地分支,通过下面命令一起创建
 git branch test origin/test #将远程分支test拉取到本地,并新建分支test(如果失败,可以先运行 git fetch)

 git命令行内示例 :
YongLiu@DOW-NP-140 MINGW64 /e/garage_android (dev2.0.0)
$ git branch --set-upstream-to=origin/dev dev2.0.0

将远程指定分支 → 本地指定分支上(pull)

以下为三种常见场景

# 将远程指定分支 拉取到 本地指定分支上
 git pull origin 远程分支名:本地分支名

# 将远程指定分支 拉取到 本地当前分支上
 git pull origin <远程分支名>

# 将与本地当前分支同名的远程分支 拉取到 本地当前分支上(`需先关联远程分支`)
 git pull

提交本地分支代码 → 指定的远程分支(push)

# 将本地当前分支 推送到 远程指定分支上(注意:pull是远程在前本地在后,push相反)
`准确的说,应该是提交本地分支代码 -> 指定的远程分支`
 ## HEAD代码近期修改的分支
 git push origin HEAD:dev
 ## 同上
 git push origin <本地分支名>:<远程分支名>

# 将本地当前分支 推送到 与本地当前分支同名的远程分支上(注意:pull是远程在前本地在后,push相反)
 git push origin <本地分支名>

# 将本地当前分支 推送到 与本地当前分支同名的远程分支上(`需先关联远程分支`)
git push

拉取远端tag并创建分支

 #newBranch 为新分支  v1.6.0为我们之前打好的 tag
 git checkout -b -NewBranch v1.6.0

合并冲突

通过git diff 获取冲突部分,也可以直接跑项目查看报错部分

  • 发生冲突的文件:
   #冲突区域
   <<<<<<< HEAD

   Creating a new branch is quick & simple.

   =======

   Creating a new branch is quick AND simple.

   >>>>>>> feature1
	
	#解释区域
	其中,git使用<<<<<<<=======>>>>>>>标记文件中自己和别人产生冲突的部分
	
	在<<<<<<<=======之间为自己的代码
	
	=======>>>>>>>之间为别人的代码
	
	如果保留自己的代码,将别人的代码删掉即可

	#冲突解决后提交 
    git status
    git add .
    git commit -m "fix bug"
    git push origin 分支名

分支间临时存储

切换分支,提交当前本地的代码(stash)

stash(临时)空间 - 项目实战

场景:准确的说,应该是切换分支时将最近的代码同步切换

 git stash push #将文件给push到一个临时空间中
 git stash list #可以将当前的Git栈(临时空间)信息打印出来,
 git stash pop #将文件从临时空间pop下来

git存储(stash)

stash(临时)空间 - 项目实战

我记得,这个场景适用于在本地分支切换时将A分支的刚写的代码,切换到B分支上,主要用到的是临时存储区;当然有一种方式是将A分支进行提交,然后B分支拉A分支的代码,但是这种操作可能会造成部分垃圾数据

git stash                  <- 保存当前的工作进度 -> 
git stash save "message"   # 保存进度加说明
git stash list             # 显示进度列表
git stash pop              # 恢复最新保存的工作进度,并将恢复的工作进度从存储的列表中删除
git stash apply            # 恢复最新保存工作进度,但不删除
git stash drop             # 删除一个进度,默认删除最新的
git stash clear            # 删除所有

1、储藏更改:将当前更改的代码储藏起来,等以后恢复使用
   git stash
2、恢复储藏的代码
   git stash pop //恢复的同时把stash内容删掉

或者
1.git stash apply  #恢复stash,但是stash内容并不删除

2.git stash drop #在上面操作的基础上,以此来删除stash

注: git stash list #查看全部的stash列表。

git遴选(cherry-pick)

用于把另一个本地分支的commit修改应用到当前分支

git cherry-pick <commit_id>    

git重新基变(rebase)

git rebase <branch_name>   # 合并分支
git rebase --continue      # 执行rebase出现冲突解决后,执行该命令会继续应用(apply)余下的补丁
git rebase --skip          # 跳过当前提交
git rebase --abort         # 终止rebase, 分支会回到rebase开始前的状态

失误操作

修改commit备注

这里指的主要是已commit到本地,未push远端的场景

其实关于类似场景有好几种,日后有机会补足一下

 git commit --amend
 #进入编辑模式之后,你会看到之前你的commit备注信息!~   进行修改,然后保存,最 后关闭! 然后git会自动重新保存

撤销修改

注:一旦执行了git commit -m "*",就不能再使用以下命令回退

git  checkout -- 文件

分两种情况分析:

1.还没有执行 git add 操作,执行上面的操作后,会恢复到和版本库中一模一样的版本状态。
2.执行了git add ,还没执行 git commit ,再执行上面的操作后,会恢复到git add 结束后的状态

git撤销(revert)

git revert commit               # 撤销指定commit
git revert HEAD                 # 撤销上一次commit
git revert -no-edit HEAD        # 撤销上一次并直接使用默认注释
git revert -n HEAD              # 撤销上一次但不commit

回退已push版本

git reflog //查看所有分支的所有操作记录

通过 git reflog 获取commit id (版本号),如下:
//版本号:62e6739 都是7位数,填写在回退的版本号处即可!
62e6739 HEAD@{1}: reset: moving to HEAD^

git reset --hard 版本号 //本地回退到指定的版本

git push  -f origin dev    //将远程的也回退到指定版本

/**华丽的分割线**/

科普内容 - Git log和reflog区别:

git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),
包括已经被删除的commit记录
 
git log则不能察看已经删除了的commit记录

分支提交错误,导致分支冗余

忘记切换分支,误将代码提交到了别的分支,同时远端也创建了此次错误提交的分支(之后 pull 、push、都会又有问题,且远端正确的分支下看不到此次提交)

首先这个是可以曲线救国的,例如我们在这条看似错误的分支上拉取目标分支的代码,然后push后,对目标分支发起合并请求

我的工作场景

因为本地有多条分支用于开发,所以当 本地分支与远端分支名不同时,采用 git push orgin HEAD:远程分知名 进行代码提交,但是因为速度太快,导致输入远程分知名错误 ,误将代码提交到了错误分支,导致自身git操作时报错,工作受影响

git pull 报错信息

#锁定节点有问题
 cannot lock ref 'refs/remotes/origin/branch_name': is at 
 95b2ddb09e303b4857d6c0fd6545a5062349e00e but expected 20525f2edbef6ce8b3f6ff8c107abc25e9de973f

解决方式

首先 上文中的  95b2ddb09e303b4857d6c0fd6545a5062349e00e / 20525f2edbef6ce8b3f6ff8c107abc25e9de973f
#通过show命令,可查看对应节点的代码
git show 95b2ddb09e303b4857d6c0fd6545a5062349e00e 

主要解决流程

1.查看远端与本地分支
git branch -a 

2.删除远端的错误分支 ,然后在进行分支查看
git branch -a 

场景1 :远端错误分支已不存在,此时可正常使用git
场景2:远端错误分支依旧存在,那么进行如下处理

#用来清除已经没有远程信息的分支,这样git branch -a 就不会拉取远程已经删除的分支了
git fetch origin -p 

3.此时如果不出意外的话,那么远端的错误分支肯定不在咯! 那么进行正常Git命令操作即可!


服务器变动

GitLab迁移,修改本地代码库的服务器路径

修改方法

1.查看当前代码库服务器地址

命令:git remote get-url origin
命令行会输出:ssh://git@你的ip地址/dowgroup_web.git ######

2.修改当前代码库服务器地址,替换“你的ip地址/”为“新的服务器ip地址”

命令:git remote set-url origin git@gitlab.kjdow.com:dowgroup/dealer_web.git
#示例
git remote set-url origin git的HTTP地址
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

远方那座山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值