(二)要修改之前推送到远程库中的文件,并重新推送上去

上一篇我们讲了如何将本地的文件(一个文件夹fold,一个文件read.txt)推送到远程库(gitlab仓库learngit)中,现在假如我们要修改fold/lalala.txt中的内容,并且重新推送到相同的远程库中,该怎么做呢?

1、先说明一下,git有4个区域:

工作区(working directory) :工作区是我们能看到的区域,就是本地目录,我们在目录里面进行操作;
暂存区(stage index):git add命令就是将文件从工作区添加到暂存区;
本地版本库(repository):git commit命令就是将暂存区的文件提交到版本库中;
远程库:git push命令就是将本地版本库中的文件推送到远程库中。
四者的关系如下图:
这里写图片描述

2、具体步骤

2.1、将远程库中的文件clone到本地;

本地git版本库:/home/lanyue/learngit
远程的gitlab仓库:我自己gitlab账户下的learngit

首先,进入本地git版本库learngit的目录;

[lanyue@localhost ~]$ cd learngit   # 这个地方就叫做工作区

然后,将远程库中的文件clone到本地;

[lanyue@localhost learngit]$ git clone git@gitlab.com:lanyue/learngit.git

[email protected]:lanyue/learngit.git是远程库的SSH地址,修改成你自己的。这样,就将远程库的工程learngit中的全部文件下载到了本地目录learngit中。如果在此操作之前,你本地已经有了这些文件,最好也要clone,覆盖掉本地的,为了保证本地版本库与远程库一模一样,防止冲突的发生。

进入到刚才下载的目录learngit中:

[lanyue@localhost learngit]$ cd learngit  
[lanyue@localhost learngit]$ pwd
/home/lanyue/learngit/learngit   

2.2、清空本地git版本库learngit暂存区的文件;

[lanyue@localhost learngit]$ git rm -r --cache <文件名>  # 删除暂存区的某一个文件(不改变工作区的文件)
[lanyue@localhost learngit]$ git rm -r --cache .  # 删除暂存区的所有文件(不改变工作区的文件)

这步是为了防止commit的时候,不小心提交了自己不想提交的东西。因为你之前在本地git库learngit的工作区进行过操作,本地git版本库learngit的暂存区很可能还保留你上一次已经add但是还没有commit的文件,但是你这次并不想commit到本地git库learngit中,所以有必要清空一下暂存区的文件。

比如说,我本地git库learngit的工作区中,有如下东西:文件夹fold_a、文件夹fold、文件read.txt。假如之前我在本地git库learngit中进行过操作,我当时把文件夹fold、文件read.txt用git add命令加到了本地git库learngit的暂存区,但是还没有commit到本地git库learngit中。现在,我想将文件夹fold_a推送到一个远程库中去,首先要做的就是将文件夹fold_a add到暂存区,然后commit到本地git版本库learngit中,然后再push到远程库。
假如我直接按照下面进行操作:

[lanyue@localhost learngit]$ git add fold_a  
[lanyue@localhost learngit]$ git commit -m '添加新文件夹fold_a'  
[lanyue@localhost learngit]$ git push origin master

你会发现,你不仅将文件夹fold_a push到了远程库中,而且也将文件夹fold、文件read.txt一起push到了远程库中。因为git commit命令,是将暂存区的所有文件都提交到了本地git版本库learngit中(暂存区的文件除了fold_a,还有文件夹fold、文件read.txt),所以你push的时候,是将这些东西一起都push到了远程库中。

所以,有必要在commit之前,清空一下暂存区的文件。注意,命令git rm -r –cache <文件名>存在的坑:清空暂存区之前,你要确定之前在暂存区中的文件,你确实是不需要了,能被删除。因为该命令实际上的意思是,停止追踪某个文件(但是并不会改变工作区中的该文件),这样的话这个文件就没有追踪记录了。假如你在本地工作区误删了该文件(但是该文件你之前已经commit到了本地版本库中),此时你想要恢复该文件到本地的工作区,是不能用git checkout -- <文件名>恢复过来的!!!ps:git checkout命令是用本地版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”(该命令存在的坑:会清除工作区中未添加到暂存区的改动 ,使用的时候要注意)。

2.2.3、使用git status检查暂存区状态;

在每次执行 git commit之前先使用git status检查文件状态是一个很好的习惯, 这样能防止你不小心提交了你不想提交的东西。

[lanyue@localhost learngit]$ git status

注意:git status只能看到”add到暂存区但是还没有commit到本地版本库的文件”和”还没有被add到暂存区的文件”的状态,已经commit到本地版本库的文件,是看不到的。看项目历史的信息要使用git log。“add到暂存区但是还没有commit到本地版本库的文件”的状态是“unstaged”,‘还没有被add到暂存区的文件’的状态是“untracked”;

2.2.4、按照自己的实际需求,修改需要修改的文件;

我要修改的文件是/home/lanyue/learngit/learngit/fold/lalala.txt,我在目录/home/lanyue/learngit/learngit/fold下,对lalala.txt进行修改编辑。

2.2.5、将所有文件push到远程;

需要修改的文件编辑修改完毕之后,回到目录/home/lanyue/learngit/learngit下

[lanyue@localhost learngit]$ pwd
/home/lanyue/learngit/learngit

分3步:

[lanyue@localhost learngit]$ git add fold    
[lanyue@localhost learngit]$ git add read.txt  # 先将所有文件add到暂存区
[lanyue@localhost learngit]$ git commit -m '修改了lalala.txt'  # 然后,将暂存区的文件全部commit到本地版本库中
[lanyue@localhost learngit]$ git push origin master  # 最后,将本地版本库中的文件全部push到远程库中

注意:在add的时候,不仅仅要add fold/lalala.txt,而是要将/home/lanyue/learngit/learngit/下的所有东西都add到暂存区,然后一起commit,push到远程库。如果只add fold/lalala.txt,然后commit,push,那么你就会发现,远程库中只有fold这一个文件夹,并且该文件夹里面只有lalala.txt这一个文件,之前远程库中的其他文件都被覆盖掉了!

这样,我们就完成了“要修改之前推送到远程库中的文件,并重新推送上去,该怎么做呢?”的问题。

猜你喜欢

转载自blog.csdn.net/lanyuelvyun/article/details/79856877
今日推荐