# Git 使用方法 **Repository Path**: lyc458216/git_instructions ## Basic Information - **Project Name**: Git 使用方法 - **Description**: 介绍了Git的基本使用方法 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-06-14 - **Last Updated**: 2021-01-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Git 使用手册 ## Git 常用命令速查表 ![Image 'Git常用命令速查表'](img/Git常用命令速查表.png) ## 生成 ssh 公钥并连接远程仓库 ### 第一步 生成一个 ssh 公钥 ```bash ssh-keygen # 本地创建 SSH (三下回车) ``` ### 第二步 获取刚才生成的 ssh 公钥 获取方式有两种: 第一种方法:使用如下指令获取本地公钥(推荐): ```bash cat ~/.ssh/id_rsa.pub ``` 具体操作如下图所示: ![Image '生成SSH公钥图片示例'](img/生成SSH公钥图片示例.png) 第二种方法:进入 id_rsa.pub 文件所在的目录,拷贝 id_rsa.pub 里的公钥 将获取到的公钥粘贴到仓库中的 SSH and GPG keys 里 使用如下指令确认是否配对成功 ```bash ssh -T git@github.com ``` SSH警告 当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告: ```bash The authenticity of host 'github.com (xx.xx.xx.xx)' cant be established. RSA key fingerprint is xx.xx.xx.xx.xx. Are you sure you want to continue connecting (yes/no)? ``` 这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。 Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的一个信任列表里了: ```bash Warning: Permanently added 'github.com' (RSA) to the list of known hosts. ``` 这个警告只会出现一次,后面的操作就不会有任何警告了。 如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。 ## 初始化本地仓库与本地环境配置 **本地仓库与远程仓库做关联有两种情况:一种是先创建本地仓库然后远程仓库与本地同步;另一种是先创建远程仓库然后本地与远程同步** ### 第一种 先创建本地仓库,然后同步到远程地址 **git init** :初始化本地仓库;隐藏文件.git 就是本地仓库 **git config --global user.name 'lyc458216'** :本地环境配置用户名 **git config --global user.email lyc458216@xxxx.com** :本地环境配置用户邮箱 **git config --list** :查看 git 配置 复制 github 项目上的项目地址:Clone or download(比如 https://github.com/lyc458216/xxxxx.git ) 使用如下指令来添加远程仓库 ```bash git remote add origin https://github.com/lyc458216/xxxxx.git ``` ### 第二种 先创建远程仓库,然后同步到本地 先复制远程库的地址,注意 ***必须是SSH 形式的地址*** 格式如下: ```bash git@gitee.com:lyc458216/*********.git ``` 然后在本地 ```bash git clone git@gitee.com:lyc458216/*********.git # 此时 git 会把远程库代码克隆到本地 ``` 小结: 要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git; 关联后,使用命令git push -u origin master第一次推送master分支的所有内容; 此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改; 分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的,当有网络的时候,再把本地提交推送一下就完成了同步。 ## 开始工作 ### 远程仓库操作 **git remote -v** :查看远程仓库 **git remote rename [old][new]** :远程仓库重命名 **git remote add [name][remote url]** :添加 github 源仓库地址为远程仓库 ### 基础工作流 工作目录、暂存区、Git 仓库: ![Image 工作目录、暂存区、Git仓库](img/工作目录、暂存区、Git仓库.png) 四个工作区及指令: ![Image 四个工作区及指令.png](img/四个工作区及指令.png) **git status** :查看当前文件的状态 **git add [文件名]** :提交到暂存区 **git add .** :提交所有文件到暂存区 **git commit -m '描述信息'** :提交到本地仓库(每次 commit 都称为一个版本),描述本次版本提交信息 **git push [remote][branch]** :提交内容到远程仓库 **git log** :打印当前所有操作 ### 撤销工作区修改 **checkout** :必须要先 add 才存在恢复一说,checkout 可以理解为“切回某个文件”的意思。但是要注意,这个命令是对工作区生效的 **git checkout -- [文件名]** :撤销工作区对暂存区的修改(回退到最后一次 add 后的暂存区状态,使工作区与暂存区状态一致) 例:把 readme.txt 文件在工作区的修改全部撤销 ```bash git checkout -- readme.txt ``` ```bash # 去除所有更改 git checkout . ``` ### 暂存区版本回退 HEAD 及各个版本示意图: ![Image 'HEAD及各个版本'](img/HEAD及各个版本.png) 不覆盖工作区: **git reset HEAD [文件名]** :暂存区文件撤销 **git reset HEAD~3** :暂存区文件撤销 3 次 高级指令: ```bash git reset --(soft | mixed | hard) | ``` **soft** -> 只回退 HEAD,回退到 commit 之前的状态 **mixed** -> 部分回退,包括 HEAD,index,回退到 add 之前的状态 **hard** -> 全部回退,包括 HEAD,index,working tree,直接退回到上一个版本,(使用--hard 会覆盖工作区内容) ### 差异比较 **git reflog** :每一步都干了什么 **git diff** :比较工作区与暂存区 **git diff HEAD** :比较工作区与本地版本库中最近一次 commit 的内容 **git diff --cached** :比较暂存区与本地版本库中最近一次 commit 的内容 **git diff [commit-id][commit-id]** :比较两个 commit 之间的差异 ### 分支 **git branch** :查看分支 **git branch ** :创建新分支 **git checkout ** :切换分支,例: ```bash git checkout master ``` **git checkout -b ** :创建并且换分支 **git branche -d ** :删除本地分支 **git push -d ** :删除远程分支 推送至远端库,及从远端库拉代码: ```bash git push origin master ``` 此写法是 git push origin master:master 的简写形式,把本地的 master 分支(前一个 master)推送至远端 master 分支(后一个 master,如果远端没有这个分支会自动新建一个) **遇到 failed to push some refs to https://github.com/lyc458216/Music.git 问题如何解决:** 出现错误的主要原因是 github 中的 README.md 文件不在本地代码目录中 解决方法: 可以通过如下命令进行代码合并(注:pull=fetch+merge) **git pull** :从远端库拉取代码到本地端 **git pull --rebase origin master** :从远端库拉取代码到本地端 **git clone https://github.com/lyc458216/Music.git** :只拉取这个项目 master 分支上的代码 **git merge origin/index-swiper** :在 master 分支下执行改命令,把线上的 index-swiper 分支新增的内容合并到 master 分支上 ### git 高效技巧 文件暂存: **git stash save -a 'message'** :改动添加到 stash **git stash drop ** :删除暂存 **git stash list** :查看 stash 列表 **git stash clear** :删除全部暂存 **git stash pop ** :恢复改动