这个是继上篇文章git入门往后写的,主要原因还是在尝试将一些资料文件上传到github的时候遇到了比较多的问题吧。

我认为建立连接的方式我所目前能够实现的应该是两种

在讲述实现方法之前,我觉得应该对于远程操作的命令应该有所了解。

git常见的命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
git init                    //初始化本地仓库,生成一个.git文件夹,这也是git的核心

git add [target] //添加目标文件到缓存区

git rm -f <filename> //这个命令是删除缓存区里和工作区里该文件

git rm --cached <filename> //当你add了你不想要的文件,这个命令可以删除缓存区的文件,但保留工作区

git commit //提交在缓存区的文件,使用 -m [message]添加必要的信息(不添加也行自动弹出)

git status //查看git的状态

git clone [url or ssh]
//非常重要的一点是把远程仓库直接clone下来,默认会与其克隆下来的远程仓库进行连接,名称就叫做 origin

git pull origin master
//拉去远程仓库“origin”相应的分支到本地仓库中的master中,在push之前常常需要先pull一下最新的仓库

git pull origin master --allow-unrelated-histories
//如果本地与远程是两个独立的仓库,则在pull时需要指定其“允许无关的日志合并”,否则会保存

git push origin master
//将本地仓库中的内容提交到远程仓库中(origin为远程分支的名字,master为当前分支的名字,应注意的是,该命令是不完全完整的,在实际使用中,如果是第一次提交到远程,应该使用的命令为【git push -u origin master】,如果不是第一次,则直接使用git push即可)

git remote add origin [url or ssh]
//添加一个远程仓库连接,并为其命名为"origin",当然也可以自定义其它的名字,但一般都命名为origin

git remote rm origin //删除一个名为"origin"的远程仓库连接

git remote set-url origin [url or ssh]
//修改"origin"的url(结合上面一个命令可以发现,想要修改远程仓库连接有两种方法:一种是先删除再添加,一种是直接修改)

无论是url或者是ssh都在仓库界面的code按钮查看复制,ssh更加的安全。

原理

git add . 和 git add * 的区别

git add . 添加所有文件、文件夹和子文件夹,包括.gitignore和以点开头的任何其他内容;

git add * 将添加除以点开头的文件、文件夹和子文件夹以外的任何文件、文件夹和子文件夹。

git add .也尊重.gitignore,而git add *会在任何非点文件被gitignore时抛出一个错误。使用git add .比git add *好得多

* 不是git的一部分,它是shell解释的通配符。 * 扩展到当前目录中的所有文件,然后才传递给git,git是add的全部文件。.是当前目录本身,git add将添加它和它下面的所有文件。

add *表示添加当前目录中的所有文件,名称以点开头的文件除外。这是shell功能,Git只接收文件列表。

add .在shell中没有特殊的含义,因此git递归地添加整个目录,几乎相同,但包括名称以点开头的文件。

删除远程仓库文件的方法

删除时非常需要注意的一点是,暂存区里的文件并不会随着提交而清空。同理,你删除的文件还在暂存区里,需要移除暂存区的已被删除的文件才可以commit。

同时删除当前工作目录和暂存区的文件或者目录。

git rm <file>
git rm -r <path>

只删除暂存区的文件或者目录。

git rm --cache <file>
git rm -r --cache <path>

直接删除法

直接删除指定的文件或者目录。适用于要删除的文件数量比较小的情况。

git rm -r --cached demo
git commit -m '删除 demo 文件夹'
git push -u origin master

过滤删除法

在工程的根目录下添加 .gitignore 文件,将不需要的文件过滤掉,然后执行命令。该操作的原理是将暂存区中的所有文件删除,然后通过 git add . 命令将经过 .gitignore 文件过滤的文件添加到暂存区。该方法适用于大批量删除文件。

git rm -r --cached .
git add .
git commit
git push -u origin master

无论直接删除还是过滤删除,目的都是删除已经删除的文件在暂存区的记录。

PS:需要注意自己的命令行提示的各种信息

第一种实现方法(git clone)

Step1: 在github中建立一个仓库名为git_test

Step2: 进入一个文件夹使用git clone <该仓库的url or ssh>

此时git clone是完完整整的将整个仓库克隆到本地。会生成一个和仓库同名的文件夹,进入文件夹,可以直接看到 .git 文件。

Step3: 不需要进行远程连接,自动建立了连接(默认origin)

利用 git remote -v查看远程连接信息

Step4: 创建测试文件提交至远程仓库

测试完毕!

第二种实现方法(初始化本地仓库+手动添加连接)

Step1: 在github新建仓库同时初始化本地的一个仓库

新建仓库:

进入文件夹~/Desktop/git_freely 使用git init初始化本地仓库

同时可以看出本地仓库没有建立远程连接。

Step2: 建立远程连接

可以看出此时已经建立了远程连接,且给远程仓库的名字其实随便取(一般是origin),我取得lixiang。

问个问题:这个时候能够直接按照第一种实现方法创建测试文件,然后git add,commit,push吗?

既然我问了,肯定是不行的😄,不信我们试试。

为什么?

这个可能需要知道git的一些基础的原理,不过相信都听过他叫,分布式版本控制,咱们只管版本控制这四个字,请问你的本地库里有远程仓库的任何版本吗?要知道,当你在github上建立一个新仓库的时候,他是有第一个版本的,名字叫做initial commit,(也可能不叫做这个)总之我是想说创建之初会伴随着第一次初始化的提交,但是本地没有。你会问,为啥没有,你怎么知道?git log看看😜

解释一下,这个是我为了展示我说的反例做的一次commit。实际上应该是,git log后啥东西都没有。

解决办法:

把远程仓库的初始化版本拉过来就好了,作为本地的基础版本,才叫版本控制嘛。git pull很形象

它提示这个操作不成功是因为我有个test.txt文件,本地仓库的第一次commit和远程仓库的初始版本并不同,所以它提示我偏离的分支,巴拉巴拉一大堆,正如它的提示说的,可以使用 git pull --rebase lixiang main

你可能不知道这个 --rebase 的作用,其实就是分支合并提交,把远程仓库和本地仓库不管三七二十一直接合并,并做一次提交。

成功了!git log 看看…

能看出来,远程仓库的Initial commit跟我的本地的第一次的commit合并了,但是远程和本地仓库此时并不同步!需要上传到远程仓库。

Step3: git push

成功了,有个小问题是分支发生了变化,这个地方原因在于本地初始化的默认分支是master,而远程仓库的默认分支是main。不过问题不大。

修改默认分支的命令

1
git config --global init.defaultBranch <默认分支名称>

如果上面这个过程你不明白,没关系,我把他复杂化了,其实应该更简单的,没事儿,我写一遍简单的就是了。

第二种方法的简单化

Step1:创建远程仓库初始化本地仓库

Step2:手动建立远程连接

Step3:拉取(git pull)远程仓库的初始版本

如果你看了我之前的讲述,你会发现不用--rebase参数,因为我初始化之后啥也没干,提交记录是空的,一个空的库当然pull任何东西都不会产生分叉。跟空的仓库,没有合并这一说!

Git log看看

的确那么回事儿!最后一步了!😬

Step4:创建测试文件后,git push 上传至远程仓库

去github看看

总结

我觉得我所说的只是皮毛,手把手教如何进行本地和远程仓库的连接,并提交自己想要上传的文件,其实github支持直接上传文件的,看上图的Add File,我学这个其实也没什么目的,就是感觉挺有意思的,自己想要学的深入的话,完全可以参照我的上一篇博客

对了,这篇文章基本上全都是我写的,但是肯定是看了很多很多别人的观点,自己也不停的犯错,但学习就是这么个过程,在此附上几篇我参照的原文。

知乎_Git的使用(连接远程仓库)

CSDN_删除远程仓库的文件

CSDN_Git本地文件上传到远程仓库

CSDN_删除 git 远程仓库文件

仔细看看他们写的,可能比我写的清楚,我的目的还是通过我自己的理解的原理过程,去一步步建立连接,可以说这是我的第一篇也还算是教程的博客吧,谢谢观看!