使用git命令提交代码时,经常会遇到这些报错,一开始不知道怎么解决,现在想写个笔记记录一下之后遇到方便查阅。
问题场景
场景一:
- 当你commit完代码,push到远程后报如图所示错误,说明你之前已经push过代码了,远程和本地产生冲突
- 解决:ggpush -f 强制推送至远程,覆盖之前push的代码
场景二:
- rebase后报如图所示错误,这个是因为在切分支之前,没有pull更新本地代码,所以在修改相同的文件时,代码产生冲突。
- 解决: git rebase --abort 和 git rebase --continue
- git rebase --abort 撤销rebase,会放弃合并,回到rebase操作之前的状态,之前的提交的不会丢弃;然后接着回到主分支pull 再rebase。
- git rebase --continue 执行完git rebase feature/dice 之后,本地如果产生冲突,手动解决冲突之后,用"git add"命令去更新这些内容的索引(index),然后只要执行: git rebase --continue 就可以线性的连接本地分支与远程分支,无误之后就回退出,回到主分支上。
场景三:
提交代码请求合并时,发现有冲突怎么解决?需要rebase一下目标分支,使用rebase命令合并分支,解决完冲突,执行git add .和git rebase --continue,push。
首先,去到目标分支拉取最新代码(如feature/3q-s1-main),然后rebase目标分支,如下图:
提示信息是需要 git rebase --abort ,撤销rebase,会放弃合并,回到rebase操作之前的状态,接着去vscode修改本地代码冲突。然后add提交
git add后 提示git rebase --continue,帮你一条一条过冲突
此时,已经把本地分支的代码合并到远程了,而且会保留之前提交的合并请求
补充
rebase和merge的区别
参考:rebase:gitbook.liuhui998.com/4_2.html
git提交过程
新建代码库:
- git init 新建代码库
- git init workspace 新建目录
- git clone 克隆项目
- git status 查看仓库当前的状态,显示有变更的文件。
新建分支
- git branch -a 列出所有本地分支和远程分支
- git branch daily 新建分支,停留在当前分支
- git checkout -b daily 新建并切换到新建的分支
- git checkout daily 切换分支
- git push origin --delete 删除远程分支
提交代码到远程仓库
- 在自己的分支将代码添加到暂存区git add . git commit
- git status 查看仓库当前的状态,显示有变更的文件。
- 回到主分支后git pull,更新远程代码
- 切换到新建分支 git rebase, rebase命令是为了防止主分支有更新,文件修改冲突
- 推送到远程ggpush
超级好用到stash命令
当你还在写代码,这个分支的需求还没完成,但是需要切一个新的分支或者切换到其他分支修复bug,这个时候本地代码还没有写完没提交怎么办?使用stash命令暂存文件。
- git stash 将不需要提交的文件暂存 = git stash push
- git stash list 展示stash列表
- git status push -m ‘test ’ 自定义message
- git stash pop 将暂存到文件恢复,将所需文件提交后执行这个操作 恢复
- git stash apply 0/1/2/3 暂存指定的索引到栈
- apply和push 都是恢复暂存时的状态 ,区别 :
- push 释放暂存内容,但stash列表中的信息会删除
- apply 释放暂存内容,但stash列表中的信息是会继续保留
- git stash clear 清空所有暂存记录
常用命令总结
1. git rm <文件>** 删除文件
2. git rebase -i A 处理A之后的commit — 可用于删除中途某一次的commit
3. git cherry-pick C 单独抽取c
4. git config 设置用户信息
5. git add || git add . 添加到暂存区
6. git reset HEAD 撤销暂存区的全部文件或单个
7. git reset A --hard. 回退到A
8. 使用一次新的commit,替代上一次提交
如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
9. git checkout - 切换到上一个分支
10. git merge 合并分支
11. git log 查看commit记录 git log -S 搜索某次commit
12. git diff 显示区别 **git diff <文件>** 查看修改内容
13. git fetch 更新远程
这些是自己在工作中常遇到到问题和常用到的git命令,不同的项目和问题可能解决方法会不同, 具体问题具体分析。git命令行工具很强大,熟练使用是我的目标,将会继续的学习补充。
ggpush ggpull 是git push 和 git pull 的简写
奉上文档Oh-My-Zsh Git