git add 文件夹_手把手教你git/github

9368d85447debb06a7dc14af33eb0112.png
本文首发于我的个人博客和CSDN

1.为什么要使用git和github

无论是写文档还是码代码,你一定遇到过这些情况:某句我想先删掉,但是我又怕找不回来了怎么办?我有别的想法,但是又不敢随便改动这段代码怎么办?我在稳定的代码基础上做修改,结果GG了,更悲催的是忘了改了什么地方...

也许你可以通过不断“save as”来解决,但是久而久之,你的文件会变得非常凌乱。对于少量文件或许行得通,但是一涉及包含大量文件的项目。光整理文件就足以让人头痛:-(

这个时候你就需要有一个版本管理工具来辅助你完成这些恼人且琐碎的工作,没错,它就是git。不要怕,git只是一个版本管理工具罢了,我们只需要学习如何使用它。

995d664898c623581a16702cde1266e6.png

1.1 git能干什么

git功能很强大,它可以:

  • 帮助你管理不同的代码版本
    • 代码存档,读档,就像玩游戏一样方便
    • 在不改变原有代码的基础上,同时开发不同版本代码,听起来很魔法对吧~
    • 结合远程服务器(这里是github),本地代码丢失也不怕!
  • 多人协同开发,也可以使自己的笔记本和台式机之间协同。

1.2 github是什么

github我们多少已经熟悉了,知道它是全球最大的同性交友网站开源社区。这篇文档中我们主要是为了使用它的仓库(respositories)功能。我们只需要简单把仓库理解为一个远程的存储服务器就好了,就像百度云或Onedrive之类的。

你可能不理解大家为什么要公开自己的代码。开源是一种精神,大家去分享自己的智慧,解放生产力,避免重复造轮子。其实早先github上只有公开仓库是免费的,直到财大气粗的微软爸爸收购github之后,github才提供四人以下的免费私人仓库。

2.准备

现在我们知道了:

  • git是一个版本管理工具,用于管理你的代码
  • github是一个远程仓库,用于远程保管你的代码以及多人协同工作

那么我们在学习git之前需要一些准备,我们需要:

  • 一个github账号
  • git客户端,windows下直接去官方网站下载git.exe就好啦
  • vscode
git涉及到一些命令行操作, 不过请不要害怕, 只需要掌握几条简单的命令就可以帮助我们熟练的使用git。这篇文档也会尽量简单并且图文并茂的讲述每条命令的使用方式。
如果你还是不能接受,也请看完第三章,理解整个工作流程后使用VScode无代码化的使用git。

2.1 git的安装

只有一点需要注意,在执行到这一步时需要选择使用其它编辑器(比如vscode)作为git的默认编辑器,当然如果你能够灵活的使用vim也可以选择vim作为默认编辑器。其他的一路ok就好!

9b37db0cf2b2fdf2af84fdd2ce8be753.png

4593d7254ff9528272cacc270a402a24.png

打开git bash,输入以下命令完成注册:

git config --global user.name "user.name" #你的用户名
git config --global user.email "yourmail@youremail.com.cn" #你的邮箱 

新建ssh keys,没有ssh keys无法上传文件到github。

ssh-keygen -t rsa -C "你的邮箱名" #新建ssh keys

你可以指定ssh keys的存放路径,下图第一个是默认路径,第二个箭头是你的指定。不指定直接回车就是默认路径。

b4acac8af2a8ad7f4e32916470dd4a25.png

然后找到rd_rsa和id_rsa.pub所在目录打开idb_rsa.pub,登录自己的GitHub账号,找到Settings,

1dfe33f6abfb60cda639c14820ef775c.png

1c529bb832cddbe1673c3fee361552ac.png

abfe3610deede804ac2af85f9d20fdc3.png

然后,将idb_rsa.pub里的内容拷贝到Key内,Title内容随便填,确定即可。

f795b11cb47eafc7f2157314fe85bb9b.png

添加完成。。

3.git使用教程

3.1 建立版本仓库

在介绍github时我们提到了仓库,其实仓库就是你用于存放代码的文件夹,放在远程服务器的叫做远端仓库(简称远端),放在自己电脑上的叫做本地仓库(简称本地)。

3.1.1 建立本地仓库

  1. 新建一个文件夹(这里我新建了Code),或者是打开存放有你自己项目的文件夹,注意,不能包含中文路径
  2. 在文件夹中右键,点击Git Bash Here。当然你也可以在任意地方打开Git bash然后使用cd命令进入你想要去的文件夹。

defb38f36913060f2d8acd517f0cd89d.png
  1. 在打开的git bash中输入
git init #这条命令代表在当前文件夹下建立一个版本仓库 

fb75fa003d81089af410bdb8f29f3b41.png


如果看到文件夹下多出了一个.git文件(默认隐藏,你可能要在“查看”里打开查看隐藏文件才能看到)就说明版本仓库建立成功。这个文件是git用于管理版本的,我们不用去管它。git bash中路径的后面还出现了一个"(master)",这是你的版本库所在的当前分支。
现在Code文件夹已经从一个普通的文件夹变成了我们的仓库。

3.1.2 在github中建立仓库

经验告诉我们,我们的计算机是不可靠的,死机、误删、磁盘坏道、重装系统,这一切你想得到想不到的问题都可能导致我们用于交差的东西毁于一旦。

我们当然可以用网盘或者U盘即使备份,但是有github这样简单、免费又好用的工具,只要几步,我们就可以在github上建立自己的远程仓库!

  1. 登录github,在主页左上角点击NEW,新建一个respository

5141c6d14990dbb713eb1a347feb33e0.png

指明以下信息:

    • 仓库的名字
    • 仓库的描述
    • 仓库的类型
      • 公开:所有人都能看到你的仓库,别人可以在你的仓库上建立分支,修改你的代码以及进行提交,由你来决定是否接收他人的提交
      • 私人:你可以选择最多3个人(现在已经不限人数),只有被你选召的孩子可以执行上述操作,他们的提交不需要你同意!
    • 是否要在新建仓库的同时建立一个readme文件
      • 强烈建议不要勾选,很坑。代码一般存放在本地,勾选后远端就会出现一个你本地没有的文件,这会造成冲突!

dabd76ede9be7bc29aaab1d73956f467.png
    • 是否增加.gitignore和license
      • 同样建议不要选,理由同上。

61f325ad42a0ec48b88bd66ee6ea229d.png

3.2 提交自己的代码

3.2.1 工作区,暂存区和版本库

仓库建立好后我们的就可以正式开始工作了,Code文件夹下的文档变动都会被git察觉。假设我们在Code文件夹下写好或者拷贝了一个文件“12345.txt”,让我们输入下面的命令

git status #查看工作区状态 

f65988bc9e338d9248bf01f890f513a9.png

5b83da30491aa1d3353d8b78fd7f25d7.png

提示我们有一个未跟踪的文件“12345.txt”,这是什么意思呢?想要git管理我们的代码我们就必须先提交它,提交是分两步实现的。一是把文件加入到暂存区,二是把暂存区的文件提交到版本库。

1fdbfaba45da763b5e13d53e050aad3f.png
  • 工作区:是你真正正在修改、使用的文件
  • 暂存区:存放你要提交的文件
  • 版本库:存放代码的不同版本,相当于你代码的档案室

3.2.2 暂存文件

因为我们尽量希望自己的版本都是干净的代码,所以暂存和提交有必要分开,否则会造成版本过多,管理混乱。暂存文件的命令是

git add [文件名] #加入某个文件到暂存区
或
git add . # . 不可省略, 默认为将修改操作的文件和未跟踪新添加的文件添加到git系统的暂存区,注意不包括删除
git add -A . #-A 表示将所有的已跟踪的文件的修改与删除和新增的未跟踪的文件都添加到暂存区

让我们试一下,发现12345.txt被成功暂存了!

308f5039c5cb6dcbc74f8a9b8d831377.png

我们删掉它,用"add ." 试试

git rm --cached 12345.txt #rm表示移除 --cached表示缓存区的,所以这条命令指删除缓存区中的12345.txt
#不常用的命令,毕竟修改文件后直接add就可以更新

然后

git add . #这条命令更常用,毕竟我们不能一个个的指定修改的文件吧

cd1841bb282e6621a132caa882e416eb.png

大功告成!

建议经常使用add命令stage自己的代码,如果你修改了代码但是不stage是无法提交的。

3.2.3 存档和读档——后悔药

1.提交

让我们修改文件再试试,这里我在12345.txt中加入了一行代码,并新增加了一个文件。

9b7cb9ecdfacc82d2cf064d0a14d0773.png

0a7ef18dd688d30739406b204f1e334b.png

这些文件变动都被追踪到了。

3e5c389a64923606bd6c9073d2e9ee8b.png

想象自己是在玩游戏,如果我们进入到某个重要节点例如即将进入Boss战,我们通常都会及时存档以免自己损失惨重。同样写代码也该及时“存档”。输入commit(提交)命令进行提交,可见git知道我们提交了两个文件,增加了一行代码!

git commit -m "版本说明" 
#双引号是提交代码时必须的说明,这是强制的,不写就无法提交

9292f4d9498e96a16980fd5ba987d2ae.png

修改文件这两个文件再提交一次!

1adaed728ec5040241a79d7885e9741b.png

c11d179c9ac4679a90bc77018d97df9d.png

8ad9465f2388aa1f7789ec0a6e14000a.png

输入git log以查看版本,箭头指向的是commit的版本号,我们可以用它回到任一版本。带有HEAD标志的就是当前版本库中存放的版本。

git log #查看版本日志
git log --graph ##以树状图的形式查看版本日志

2.回退版本

假如我刚刚的代码出现了无法修复的重大bug怎么办?别担心,我们可以随时回退到之前的任意版本,因为我们存档了!

如果我们只是在工作区更改,还没有提交,比如我刚刚加入了一堆bug,试下这条命令就变回来了,很方便吧!这也是为什么我们要常常stage我们的文件。

git checkout -- [文件名] #将工作区文件状态恢复成最新的一次commit或者add的状态(取决于最后一次操作)
git checkout -- .    	#撤销对所有文件的更改

1350eb06b53cf2a7506b03258a22aafc.png

e2b71a0b5b5236fc6b410e17323ddd30.png

147bfe2211869ae403505679d3d0df7a.png

如果我们已经把更改暂存甚至提交了,可以用reset命令回退到工作区,然后再使用checkout撤销更改

git reset HEAD [文件名] #将某个文件回退到最近一次提交,记得吧,HEAD表示当前版本
git reset HEAD 	       #省略文件名表示回退所有文件

ae33bb362f3acaab86ed3176b447c4aa.png

如果我们觉得整个版本都不想要,就是想回某一个版本,还记的commit会出现一个版本号对吧,我们会用到的。

git reset --hard HEAD^ #一个^表示回到上一个版本
git reset --hard HEAD^^#两个^表示回退一个版本
git reset --hard [版本号,前5位就够了]#回退到版本号指定的版本

我们先用git log看一下现在HEAD指向我们的第二次提交,回退一个版本后指向了第一次提交

0c105789ec1e7d6f1ae1dc04eaba880b.png

再看看我们的文件,变回来了呢。

b1d431f0dd56c050ed800674ac3aa576.png

这时细心的你发现了,git log里没有第二次的版本号了,我又双叒叕反悔了怎么办,不要紧可以reflog一下

git reflog #查看历史命令,可以看到回退之前的版本号

d9c705c7069214700c2833f674817235.png

版本号就回来啦!我们重新回到第二个版本,使用版本号“回退”一次

05256566765a16757d33b826b3bd63c0.png

存档读档,妈妈再也不用担心我打不过boss了!

建议多用add暂存你的文件,在有关键更改时才提交,避免回退时面对茫茫多的版本不知所措。

3.3 分支

就算有了版本管理,老是回退版本也不是办法,别人总在你的版本上做更改也不方便。有没有我们一边开发一边还不影响已经稳定的版本的办法呢?git 给了这个机会,这就是分支。

记得我们新建仓库后路径后多出了一个master吧,这个就是git生成的默认分支,我们把它理解为树的主干。枝叶在主干上成长,树木的枝叶可以有很多,但是主干只能有一个。我们的开发应该是在枝叶上完成的。枝叶的生长不应该影响我们的主干。

911dfa13490b52cbf49f7a98149f41ff.png

在开发项目时我们要遵循以下几个原则:

  • master分支只能是稳定的版本
  • 分支可以尽量多,每个分支的功能应该明确
  • 严禁在master分支上开发,应该在其他分支开发,修复bug,最后合并到master上

3.3.1 建立分支

git branch [分支名] #新建分支
git checkout [分支名] #切换到某一分支,注意撤销操作是checkout --,不加--就是切换分支
git switch [分支名] #等价于上一条,建议用switch,更好理解

下面的例子我新建了dev分支,然后使用switch而不是checkout进行切换

f6ea2c3411bbc8edff748d4e8f91cef5.png
git checkout -b [分支名] #新建分支并转到该分支
#相当于一次执行下面两条命令
git branch [分支名]
git checkout [分支名]

现在我们在刚刚的新建的进行开发,这里我修改12345.txt中的文件内容并且新建了develop.txt,然后提交

2da6fdca7b6f4a9859e74a6aa6d1bb75.png

b22f21878d7e23fa920cd61d13d86f50.png

切回master分支看一下

32fc2ce81eac0ad4ee32b3a544a0584c.png

可以看到master分支下12345.txt并没有收到改变,这样我们就可以在不影响原有代码的基础上进行开发。

f767f49684845e99c05435122766b528.png

3.3.1 合并分支

如果我们在dev分支上的开发已经稳定,认为可以将master前进一个版本,我们就可以使用merge命令进行分支合并。首先我们要切换到master分支。然后使用

git merge dev #将dev合并到当前分支上,这里的dev可以是任意分支名

再看看master分支下的内容,已经和dev分支一样了。

99061f27f8b427a4e98c2014396ac227.png

5e6390128ee7944caebc251762f2c068.png

因为我们的dev分支是在master的基础上前进了一步,所以合并时没有冲突。但是如果我在开发dev的同时手贱更改了master中的内容,又该怎么办呢?这就涉及到冲突的解决。

fa6053c87590509add32f769dd53bade.png

6fd166b4717d89c7b8e30c814221f929.png

3.3.2 解决冲突

冲突在个人开发时很少遇到,你可以酌情先跳过本节。

我们更改master分支下develop.txt的内容如下,然后提交:

a324e88c1b5b63ba010ec34bcc8ef66f.png

切换到dev分之下修改develop.txt的内容如下,然后提交:

d3b8f465ccdf351125f7697443862558.png

再试试吧dev上的内容合并到master上,结果出错了。

7097a5e75fcb4fe50a03de809e510aa6.png

因为master和dev同时前进了一步,对相同的文件做了不同修改,git不知道哪个修改是你要的,只好提示你手动修改。不过你放心,git只会比较文件中不同的地方,如果你没用在同一处做了不一样的改动,是不会引起冲突的。

c8419479d7ef205210584df2b79028d2.png

我们看一下develop.txt,git已经帮我们标记出了冲突的地方。

这里是用vscode打开的,你也可以用其他工具,例如更加强大的visual stuido,或者更挫的记事本。用vscode只是因为它轻量而且方便,足够我们使用。

7a2b9c843d4b44989a03ec82110ba808.png

我们们只需要更改自己想要的代码,然后点击采用当前或者传入的更改问题就解决了!

aa21276ad56ed31cbdcb057790c517fb.png

c4659653b442ce4097c1a88043b1d057.png

然后提交,ok冲突解决了!

5e5dd98614c225d2276e5d58dad986e2.png

3.4 同步代码到github

虽然只在本地使用git已经足够方便,但是结合github或者其他服务器进行多人或者多设备开发才是git的完全体。

3.4.1 关联本地到远端

在github中找到我们在3.1.2中建立的仓库,复制地址

1d3aface02679bd5643281961c52e9b1.png

在本地的git bash中输入

git remote add origin git@github.com:shawer96/Code.git #origin是默认的远程主机名,后面的地址应该填你自己刚刚复制的

3.4.2 推送代码到远端

推送是指将你的代码上传到远端,以便其他设备或者他人下载使用。

我们之前在git上建立了一个空仓库,可以使用下述命令进行提交

git push -u origin master #-u表示在远端建立一个同名分支(因为远端是空的),master可以换成其他你想推送的分支

e6d4cc4e306a5a4e3f5107990257199a.png

18c78a8c872ff1f8a538ef11cbc93e35.png

之后想要在master分支上提交其他内容就不需要-u了

git push origin 本地分支名:远端分支名 #将本地分支推送到远端分支
git push origin 本地分支名  #省略远端分支名(常见),将本地分支推送到远端同名分支

3.4.3 拉去代码到本地

有的时候我们在别的设备上完成开发,并且推送到了远端,你想要下载代码到本地。只需要使用pull命令,比如我现在在github的网页上修改了12345.txt来模拟多设备或者多人的开发情况。

13af4d4eaaaf8f68220469c522f54f53.png

只要使用

git pull origin 远端分支名:本地分支名 #将本地分支拉取到远端分支
git pull origin 远端分支名 #省略本地分支名(常见),将远端分支拉取到本地同名分支

96085d6238c81902256c3bddd88e1c86.png

af38a38905d7794a19497291025853bc.png

要注意,拉取其实相当于将远端分支取回到本地暂存区,再合并到本地分支。所以在远端和本地文件不同时也会出现冲突,可以按照3.3.2中的方法解决。

4. Vscode使用git

  1. 选择文件->打开->打卡文件夹,打开你设为git仓库的文件夹

2e88e4f371642562f97617157eaf3c16.png

2. 点击左侧的按钮

d9db3ca6e17c0c9d2b40c7b95499ef5b.png

3. 可以看到工作区中修改过的文件

7c0798e025e06ccfc1e62fd510206800.png

4. 右键可以选择对文件执行哪些操作

cb937bcf9efcf4370fb6bbf906b74d4c.png
    • 打开更改:比较工作区文件和暂存区区别,如上图,很方便的功能
    • 暂存(stage),相当于add

5. 暂存后可以选择提交

64b31c1146304dd30c3a25f82ce1bb84.png

741eb1204d8a94cc4a15443db98c6a47.png


看看日志,提交成功了

670826fb260b2f7b850640f512e0acd2.png

6. 还有更多功能自己去试试吧

1b019190c30f8014da79ab41997234f4.png

参考链接

Git教程​www.liaoxuefeng.com
ca1c40a02e0b289266619beea8152b8d.png

更多内容请关注我:

Shaw的博客​shawer.work
bbaa16e19aceb3b64f54720165facd3e.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值