Git场景使用操作及相关知识

Git场景使用操作及相关知识

彼方 783 2022-04-16

前言

最近公司推出了开发人员提交规范,不再允许每位开发人员都直接对develop分支进行操作,而是从develop分支单独拉出单独的分支进行任务的开发。那这种场景下就需要频繁进行新建分支,切换分支,合并分支,回退提交等操作。在此总结一下常用的操作备份一下,以后有需要可以直接在博客上查看,不必再去网上查了。
另外也建议多使用Git命令,不要强依赖于IDE工具集成的Git操作,这样在临时切换工具的时候,也可以直接使用Git命令来操作,再说了敲命令不比在IDE上点来点去来的快(装逼)。


实际场景

实际场景解决操作会随着工作中的使用场景逐步更新。

1.拉取代码之后运行报错,需要回退到拉代码之前的状态

暂存本地修改

git stash

执行git reflog命令查看你的历史变更记录;

git reflog

使用git reset --hard 4efaf3aa 进行回退(4efaf3aa为你拉代码之前的提交记录)

git reset --hard 4efaf3aa

使用上一次的暂存

git stash pop

2. Merge Request被项目负责人退回,需要回退上一次提交修改代码重写提交

理解一件事情,你的merge请求被拒绝了,也就说远程分支是没有你的这一部分代码的,那么你只需要将本地代码回滚到未commit状态,对代码进行修改之后,重新进行commitpush操作,再提交新的merge请求即可,具体操作如下:

使用git log命令找到最近一条提交记录前一条记录的commit id

git log

再使用git reset – soft commit_id操作进行代码回退,此操作会回退到你提交的这个版本之前的状态,同时保留你有改动的代码。

git reset --soft <commit_id>

3.Merge合并分支后发现合并错误,需要回滚Merge操作

例如我把feature分支的代码merge到develop分支之后,发现有问题,需要回滚合并操作,那就可以按照如下步骤操作:

第一步:git checkout到你要恢复的那个分支上

git checkout

第二步:git reflog查出要回退到merge前的版本号

git reflog

第三步:git reset --soft [版本号]就回退到merge前的代码状态了

git reset --soft f82cfd2

四个等级

Hard

  • 移动本地库HEAD指针

  • 重置暂存区

  • 重置工作区

意思就是,回滚后,本地代码就是你回退版本的代码

Soft

  • 移动本地库HEAD指针

意思就是,回滚后,仅仅是把本地库的指针移动了,而暂存区和你本地的代码是没有做任何改变的。而你上次改动已提交committed到本地库的代码显示是绿色即未提交

Mixed

  • 移动本地库HEAD指针

  • 重置暂存区

意思就是,回滚后,不仅移动了本地库的指针,同时暂存区的东西也没了,意思就是你上次添加到暂存区的文件没了

Keep

  • 移动本地库HEAD指针

  • 暂存区不变

  • 重置工作区

意思就是,回滚后,本地代码就是你回退版本的代码,而暂存区是没有做任何改变的


分支相关

1.新建分支并进行切换

git checkout -b branchName

2.列出所有本地分支

git branch

3.列出所有远程分支

git branch -r

4.列出所有本地分支和远程分支

git branch -a

5.合并指定分支到当前分支

git merge [branch]

6.删除分支

git branch -d [branch-name]

7.删除远程分支(一般为项目负责人操作)

git push origin --delete [branch-name]
git branch -dr [remote/branch]

暂存相关

1.暂存(存储在本地,并将项目本次操作还原)

git stash

2.使用上一次暂存,并将这个暂存删除。
使用该命令后,如果有冲突,终端会显示,如果有冲突需要先解决冲突(这就避免了冲突提交服务器,将冲突留在本地,然后解决)

git stash pop 

3.查看所有的暂存

git stash list 

4.清空所有的暂存

git stash clear 

5.删除某一个暂存,在中括号里面放置需要删除的暂存ID

git stash drop [-q|--quiet] [<stash>] 

6.使用某个暂存,但是不会删除这个暂存

git stash apply