系列文章目录
项目实践常用git指令总结
前言
上一篇文章介绍了Git在项目中常用的基本命令,本篇文章更接近项目实际,主要介绍Git的综合应用及常见问题。
一、综合应用
1.1 文件pull到工作区
git pull会把本地未提交修改覆盖,因此我们在pull之前需要将当前工作区修改等add到本地存储区后然后使用git stash命令进行暂存。
git pull的目的是让本地仓库的源码修改合并到远程库中或者实现代码同步,因此,我们pull是为了本地commit 和远程commit 的对比记录,如果没有冲突的时候就直接合并了。
git pull = git fetch + git merge
1)$ git stash
将本地修改暂时存储。可以使用git stash list看到保存的信息,其中stash@{0}为刚才保存的标记。虽然只是显示了commit注释里面的内容,但其实当前的修改记录已经被暂存。
![在这里插入图片描述](https://img-blog.csdnimg.cn/30bcf99454cd4a1198178fe77034c514.png#pic_center)
2)$git pull
将远程仓库的分支源码拉到本地仓库,Already up to datae 说明本地仓库和远程仓库同步。
![在这里插入图片描述](https://img-blog.csdnimg.cn/809268401ee943849ded6b4b9cad0e5c.png#pic_center)
3)$ git stash pop
还原暂存的内容。可能提示当前修改需要保存,即保存的修改相对pull的源码有所改动需要保存。
![在这里插入图片描述](https://img-blog.csdnimg.cn/1a4a477ef6e143e697c8ba66a4a0923e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L-d5bCU572X5aSr,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
1.2 文件push到远程仓库
push之前我们最好使用pull进行文件同步,确保是在同步前提下作了修改再push。
![源于网络](https://img-blog.csdnimg.cn/0d5ef5d903d34291ae36047e6893edcd.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L-d5bCU572X5aSr,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
在推送(push)操作之前,建议使用git show命令检查文件代码变化,默认为最新一条的log.Push成功后,建议在另外一个空的目录中或在另外一台机器上使用 git clone 克隆出完整的文件代码验证。
1.3 撤销工作区的所有修改并删除暂存区文件
git reset --hard HEAD : 将stage area中未提交的file回滚到之前的commit状态
git clean -d -f 删除未跟踪的目录和文件
1.4 某个文件夹中含有.git,导致文件夹无法提交
首先修改根目录下的.gitignore文件并提交。只有先提交了.gitignore文件后,仓库才能在文件提交时“筛选”指定文件夹中的文件,.gitignore文件不能和文件夹修改同时提交。最后提交文件夹的文件。此时,上传到github仓库中的该文件夹就不含.git文件。但是本地仓库中文件夹中仍旧包含该.git文件,方便本地更新相关数据(比如:在线文件升级等)。
以cJSON在线软件包为例,menuconfig配置下载后,该文件夹中包含.git文件夹,导致整个文件夹无法commit。
![在这里插入图片描述](https://img-blog.csdnimg.cn/11f9cc6de9894a12b642280459ce723b.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L-d5bCU572X5aSr,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
修改根目录下.gitignore文件,新增忽略规则。
![在这里插入图片描述](https://img-blog.csdnimg.cn/aee5335407db404f9bda015699b0a830.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L-d5bCU572X5aSr,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/add87e5b213c4c8fac92ebc7f4a77995.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L-d5bCU572X5aSr,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
缺点:这种方式提交者可以正常在本地升级软件。但是,从远程仓库下载的版本无法升级软件,因为升级文件夹中不含.git文件。
1.5 修改远程仓库地址
由于远程git的地址发生变化(git仓库迁移),因此我们需要同步本地仓库到最新的git仓库地址。那么出现一个问题,怎样修改远程仓库地址呢?步骤如下:
1)首先通过命令行查看本地旧的远程仓库地址
git remote -v
其中,v = verbose(详细的)
2)查看复制最新git所需仓库的URL
必须为仓库的根目录,而不是某个分支的地址。
3)通过命令行修改远程仓库地址
git remote set-url origin [url]
建议修改后,通过git remote -v再次确认。
【举例】
git remote set-url origin http://helloworld.com:2009/ file/template
4)通过git pull 将远程仓库的源码拉到本地
可能需要输入用户名和密码进行验证
【问题】
Q1:在git pull时出现git remote: HTTP Basic: Access denied 错误。
A1: 由于本地git配置的用户名、密码与gitlabs上注册的用户名、密码不一致导致。可参考如下连接进行解决:
参考链接
二、问题汇总
Q1. git遇到 modified content 无法提交问题
A1: 这是因为文件夹下存在.git, 导致添加出错。
方案a. 删除掉.git后,尝试重新添加,如果失败使用方案b;
方案b. “先删后增”。备份文件到项目外,然后git add让工作区知道有文件删除,在项目外将.git删除后,复制到原位置,然后再次git add 让工作区知道有文件添加。注意,不能删除后不git add就立马拖进来,这样仍旧会失败。
方案c. 尝试修改.gitignore文件得托管规则,使远程服务器忽略特定文件夹下的.git文件夹。
Q2. 新增文件git status无法显示
A2: git add -f 文件完整路径 其中,-f 为—force
强制将他们添加进来
Q3. Git报错: OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443
![在这里插入图片描述](https://img-blog.csdnimg.cn/7670d5b25a7e47baa8091736cf4726b6.png#pic_center)
A3: 输入 git config --global http.sslVerify false 禁止掉ssl验证即可。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e751ebed56b949068742b3acc23634ae.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5L-d5bCU572X5aSr,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
三、参考文献
3.1 网络资源
Git语言
快速入门1
快速入门2
Git官网
3.2 书籍
1)git官方文件
《Pro Git 第二版(中文版)》
总结
住在布达拉宫, 我是雪域最大的王。
流浪在拉萨的街头, 我是世间最美的情郎。