工作至今遇见的形形色色的Git问题
前言
本文记录的是自己从工作至今所遇见的形形色色的git 的问题,现在回过头来看看这些问题,感觉自己以前好菜。不过也见证来自己的成长。
ssh方式git clone失败
报错提示
Could not read from remote repository.Please make sure you have the correct access rights
报错原因
解决办法——重新添加SSH key
- ssh-keygen -t rsa -C "username" (注:username为你git上的用户名)
- Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\灏忛┈/.ssh/id_rsa): 直接回车
- C:\Users\灏忛┈/.ssh/id_rsa already exists.
Overwrite (y/n)? y 输入y
- Enter same passphrase again: 直接回车
- Your identification has been saved in C:\Users\灏忛┈/.ssh/id_rsa. 私钥保存的地址
Your public key has been saved in C:\Users\灏忛┈/.ssh/id_rsa.pub. 公钥保存地址
- 根据路径找到公钥,将公钥添加到Git上
git pull失败(一)
报错提示
Your local changes to the following files would be overwritten by merge:
报错原因
其他人修改了该文件提交到版本库中,而我本地也修改了该文件,致使拉去代码的时候发生冲突
解决办法——贮存更改
依次进行如下操作git stash 将工作区恢复到上次提交的内容,同时备份本地所做的修git pull 拉取git stash pop 弹出自己最近保存的内容查看对应文件 解决冲突然后git 三连提交自己的代码
git pull失败(二)
报错提示
Pulling is not possible because you have unmerged files.
报错原因
修改的文件未提交
这个错误其实是这样子的——其实我之前已经pull过代码了,然后出现了冲突,解决冲突之后,我想再pull一下时报的错,后来我才知道,解决掉冲突之后是需要再次commit的
解决办法——提交到本地
git add . 嗯是的,这里 commit 前也需要先 add 一下git commit -m "获取新的代码"git pull
git push失败
报错提示
fatal: Could not read from remote repository.Please make sure you have the correct access rights
报错原因
原因一解决办法——配置公钥
1.找到公钥打开,并复制其内容2.添加公钥到github
说一下为什么会这样,因为github和gitlab是共用同一个公钥和私钥,在做公司项目的时候,我clone失败(上面第一个错误)时,重新配置了公钥和私钥,所以此时我的github上没有我最新的公钥,导致我无法push
原因二解决办法——连接网络
1.网线松动2.掉出公司内网,需要重新登录3.WiFi没网
撤销对文件的修改
描述
修改了一个复杂的index.vue文件,修改之后觉得自己写得乱糟糟的,没有一丝头绪,但这个修改文件未提交,我想恢复到它最开始的样子。
解决办法
运行命令 git status 获取到我们这个文件的路径git checkout -- 文件完整路径(好像不加--这两个横线也能使)
然后关闭这个文件在打开就好了 在提醒你是否保存修改切记不要保存
这是一个非常危险的命令,执行此操作后git会用最近的commit覆盖掉整个文件。 除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令。
自己的代码被pull下来的代码覆盖
描述
自己的代码刚刚提交,同事然后把我的代码拉下来之后也提交了,然后我再次把代码重新pull下来,发现自己刚刚写的代码全没了(备注:我合同写的同一个文件)
解决办法(一)
git log 找到最近一次提交的commit编码git reset --hard 复制的commit编码然后关闭这个文件在打开就好了 在提醒你是否保存修改切记不要保存
解决办法(二)
ctrl + z 使用这个办法是必须要知道,自己改动过哪些文件,并且编辑器未被关闭过(我当时编辑器刚好卡了,然后重启了一下编辑器.....)
只想拉取远端代码 不想commit
描述
自己的代码只写了一丁点,旁边的同事说他提交了,叫我pull一下,因为没写什么东西,所以不想commit
异想天开的尝试
当时我就想,可不可以直接pull,结果当然是不行啦,git会给你报如下的错误our local changes to the following files would be overwritten by merge:
解决办法
git stash 暂存自己的打码git pull 拉取代码git stash pop 弹出暂存
想要回到pull之前的状态
问题描述
commit之后,把代码pull下来,出现很多冲突,然后想回到pull之前的状态,将代码格式化之后再pull
解决办法
git merge --abort 回到冲突之前的状态
git merge --abort将会抛弃合并过程并且尝试重建合并前的状态。但是,当合并开始时如果存在未commit的文件,git merge --abort在某些情况下将无法重现合并前的状态。(特别是这些未commit的文件在合并的过程中将会被修改时)
查看自己的commit记录
描述
公司要求记录自己每天做了什么,想通过查看一下自己的commit记录来写日志,
解决办法
git log 此方法有缺陷,只能展示最近一次push时的commit记录最后,只有在GitLab上的历史看了
git免密操作
问题描述
最开始到新公司接手代码时,第一时间就是配置ssh,一顿操作之后,发现不管用,后来才知道公司根本就没有噢诶之ssh这种方式。然后就一直采用http的哪一种方式拉去代码,但是使用这种方式的话每次和远程仓库打交道时都需要输入密码,后来真的嫌输入密码太烦人了,就去百度看看有没有解决办法,一查还真有(之前一直以为http方式是必须要输入密码的,所以没有第一时间去百度)
解决办法
git config --global credential.helper store
是用哪个该命令之后,仍需再输入一次命令,之后就再也不需要输入密码了
取消merge
问题描述
在合并分支时,将要merge的分支阴差阳错merge到了master分支上,原本是要merge到1124生产包上,现在要将master分支回退到最开始的样子。
解决办法
1.切换到我们要恢复的分支(我这里是master分支)
git co master
2. 查看历史版本号,找到要恢复的版本号
git reflog
3.回退到之前的版本(我的是60a4a3f
git reset --hard 60a4a3f
另外回退之后reflog下面的记录也会消失,这都是我自己记录的时候才发现找不到自己刚才使用的版本号了
push分支代码
问题描述
自己在本地新建了一个远程没有的分支,并完成了开发,此时想要将代码推送到远程,不能直接使用git push
命令
解决办法
这个问题的实质是我们所在的分支没有远程分支建立联系,当我们使用这个命令时,git不知道把我们的代码推送到那一个分支,所以会出现这种情况,git pull
也是如此
方案一
git push origin <originBranch>
originBranch为远程分支该方式能将分支推送到指定的分支,若远程不存在则会自动创建该分支,但之后的推送仍需指定远程分支,不能直接使用git push
推送到远程
方案二
git push --set-upstream origin <originBranch>
originBranch为远程分支该方式能将分支推送到指定的分支并建立关系,若远程不存在则会自动创建该分支,之后在此分支可以直接使用git push
命令,会默认推送到与我们建立关系的远程分支。
方案三
git branch --set-upstream-to=origin/<originBranch> <localBranch>
localBranch本地分支 originBranch为远程分支与远程分支建立关系,若远程不存在则会自动创建该分支
git commit --amend
问题描述
上一次提交忘记删除console,删除console之后又不想添加新的提交,但是第一次使用这个命令又有点懵,不知道该怎么操作....
解决办法
- 输入该命令之后会弹出如下界面
- 因为我们只是修正我们的提交,这里并没有什么其他操作,我们先按esc退出编辑模式,然后输入
:wq
保存并退出就完成了 - 最后你可以输入
git log
查看一下我们的commit记录
代码写错分支!!
问题描述
基于同事的分支,进行一些埋点的操作,撸代码时,自己忘了切分支了,将自己的代码写在同事的分支上了,此时自己又没有提交,怎么办??
解决办法
- 先将代码暂存
git stash
- 迁出一个分支 git checkout -b
- 弹出自己暂存的代码 git stash pop
修改分支名称
问题描述
解决办法
git branch -m oldName newName
oldName
原始分支名 newName
当前分支名
如何将本地仓库放在git上面
问题描述
自己先在本地新建了一个git仓库,进行一系列的学习,现在想将自己的本地仓库上传到github上,又想保存自己的提交记录。何解?
解决办法
- 现在github上新建一个远程仓库
- 在本地仓库下使用如下命令将两个仓库关联起来
git remote add origin <originRepoAddress>
<originRepoAddress>
指的是远程仓库的地址,也就是平时我们clone用的那个地址
- 使用如下命令将本地仓库的所有内容推送到远程仓库
git push -u origin main
如果使用第三步的命令遇到如下错误这是由于你新创建的那个仓库里面的README文件不在本地仓库目录中,这时我们可以通过以下命令先将内容合并:
git pull --rebase origin main
然后再进行推送
转载自:https://juejin.cn/post/7021044496787832862