十年开发Git操作总结,应该很全面了

写在前面

你使用过 Git 吗?或许你还未接触过Git,或许你已经使用了一段时间,但它或许仍然令你困惑。
本文主要讲解自己学习Git的方法以及解决自己遇见的各种Git问题。
首先强烈给大家推荐掘金小册 Git 原理详解及实用指南。(不是托)

  • 如果你是新人,读了这本小册并且跟着实际操作,你会对Git有一个大致的了解。
  • 如果你已经使用过一段时间Git,读了该小册之后,会让你有一种醍醐灌顶的感觉。
  • 该小册建议建议反复阅读(我觉得至少三次),每次阅读之后你都会有不一样的收获。
    • *

Git常用命令

git四连

git add .                                将所有改动放进暂存区
git commit -m "描述"                     提交并附带概要信息
git pull                                 从远程仓库拉去代码
git push                                 推送代码到远程仓库(master分支) 

其余常用命令

git log                                  查看日志
git log -p                               查看详细历史
git log --stat                           查看简要统计
git status                               查看工作区状态
git branch 名称                          创建分支
git checkout 名称                        切换分支
git checkout -b 名称                     创建并切换到新分支
git branch -d 名称                       删除该分支(不能删除当前所在的分支,不能删除没有合并到master上的分支)
git branch -D 名称                       删除该分支(可以删除没有合并到master上的分支)
git commit --amend                       对最新的一条commit进行修正
git reset --hard HEAD^                   丢弃最新提交(未提交的内容会被擦掉)
git reset --soft HEAD^                   丢弃最新提交(未提交的内容不会被擦掉)
git revert HEAD^                         回到某个commit
git rebase 目标基础点                     重新设置基础点
git merge 名称                           将分支合并到head指向的分支
git push origin localbranch              将代码推送到远程仓库的指定分支
git push -d origin branchName            删除远程分支
git stash                                暂存代码
git stash pop                            弹出暂存代码 

配置别名

对常用的一些命令进行别名配置,提升自己的工作效率

git config --global alias.st status                 git status ==> git st
git config --global alias.ci commit                 git commit ==> git ci
git config --global alias.co checkout               git checkout ==> git co
git config --global alias.br branch                 git barnch ==> git br
git config --global alias.sh stash                  git stash ==> git sh
git config --global alias.pop "stash pop"           git stash pop ==> git pop 

常见问题以及解决办法

git clone失败

报错提示

Could not read from remote repository.
Please make sure you have the correct access rights 

报错原因

SSH key失效 或者 自己没有权限

解决办法(一)——重新添加SSH key

1.ssh-keygen -t rsa -C "username" (注:username为你git上的用户名)

2.Generating public/private rsa key pair.
Enter file in which to save the key (C:Users灏忛┈/.ssh/id_rsa):         直接回车

3.C:Users灏忛┈/.ssh/id_rsa already exists.
Overwrite (y/n)? y                 输入y

4.Enter same passphrase again:            直接回车

5.Your identification has been saved in C:Users灏忛┈/.ssh/id_rsa.        私钥保存的地址
Your public key has been saved in C:Users灏忛┈/.ssh/id_rsa.pub.        公钥保存地址

6.根据路径找到公钥,将公钥添加到Git上

解决办法(二)—— 使用http的地址进行克隆

使用这种方式的话需要输入自己的账号以及密码,有点麻烦,不建议使用

git pull失败(一)

报错提示

Your local changes to the following files would be overwritten by merge: 

报错原因

其他人修改了该文件提交到版本库中,而我本地也修改了该文件,致使拉去代码的时候发生冲突

解决办法——贮存更改

依次进行如下操作
git stash        将工作区恢复到上次提交的内容,同时备份本地所做的修
git pull         拉取
git stash pop    弹出自己最近保存的内容
查看对应文件 解决冲突

十年开发Git操作总结,应该很全面了_第1张图片

然后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 

报错原因

原因一:github上没有添加最新的公钥 原因二:网络未连接

原因一解决办法——配置公钥

1.找到公钥打开,并复制其内容
十年开发Git操作总结,应该很全面了_第2张图片

2.添加公钥到github

十年开发Git操作总结,应该很全面了_第3张图片

说一下为什么会这样,因为github和gitlab是共用同一个公钥和私钥,在做公司项目的时候,我clone失败(上面第一个错误)时,重新配置了公钥和私钥,所以此时我的github上没有我最新的公钥,导致我无法push

原因二解决办法——连接网络

  1. 网线松动
  2. 掉出公司内网,需要重新登录
  3. WiFi没网

撤销对文件的修改

描述

修改了一个复杂的index.vue文件,修改之后觉得自己写得乱糟糟的,没有一丝头绪,但这个修改文件未提交,我想恢复到它最开始的样子。

解决办法

运行命令 git status 获取到我们这个文件的路径

十年开发Git操作总结,应该很全面了_第4张图片

git checkout -- 文件完整路径(好像不加--这两个横线也能使)

image.png

然后关闭这个文件在打开就好了 在提醒你是否保存修改切记不要保存

这是一个非常危险的命令,执行此操作后git会用最近的commit覆盖掉整个文件。

除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令。

自己的代码被pull下来的代码覆盖

描述

自己的代码刚刚提交,同事然后把我的代码拉下来之后也提交了,然后我再次把代码重新pull下来,发现自己刚刚写的代码全没了(备注:我合同事写的同一个文件)

解决办法(一)

git log        找到最近一次提交的commit编码
image.png
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的第三方可视化工具,首先有的笔试或者面试是要考查Git的,其次感觉使用git可视化工具之后,就没有那味儿了。
本文持续更新,有兴趣的可以关注一下,有问题大家也可以进群973961276一起探讨。

你可能感兴趣的:(git,c++,linux,程序员,经验)