Git入门(笔记)


前言

git是目前最流行的分布式(Distributed)版本控制系统。学习一下以便工作之需。相关视频链接:Git Tutorial for Beginners: Learn Git in 1 Hour。Git网站:https://git-scm.com


Git简介

为何选择Git

git是目前最流行的分布式(Distributed)版本控制系统。免费,开源,传输速度超快,并且可以拓展,同时git开分支和合并分支都很简单。几乎所有的软件工程师都具备Git的操作技能。


如何使用Git

方法一:使用命令行,这是最快,有时也是最简单的方法。
方法二:代码编辑器&IDE内置的Git基本功能支持,给不喜欢命令行的人准备的,比如VSCode中的GitLens。
方法三:图形用户界面,专为Git打造的。比如GitKraken,Sourcetree。到Git官网可以找到这些工具的完整列表:https://git-scm.com/downloads/guis


为什么一定要学命令行

GUI Tools总是有限制,要获取完整Git操作你还是需要用命令行。


Git BASH

对于Windows用户,安装Git的同时也会得到一个叫Git BASH的程序,这个程序模拟LINUX和UNIX环境下的GIT命令,推荐使用。


获取帮助

可以google查找官方文档,也可以在终端输入一下代码

git 在这里输入你想查询的命令 --help
#or
git 想要查询的命令 -h

#example:
git config --help

--help会给你命令的完整文档,-h会给你一个简短的总结。


配置Git

Git级别

在配置之前,你需要知道,Git有三个级别:
System:最高级别,在这个级别的设置适用于所有用户。
Global:在这个级别的设置适用于当前用户的所有存储库。
Local:在这个级别的设置适用于当前存储库。


第一次使用Git

第一次使用Git,我们需要指定姓名,邮箱,默认编辑器已经Git要如何处理行尾。

git config --global user.name "Xu Tao"
git config --global user.email [email protected]
git config --global core.editor "code --wait"
git config --global core.autocrlf true

默认编辑器设置为"code",是指VSCode。
Windows系统中,行尾是回车符’\r’和换行符’\n’,相比之下macOS和Linux只有’\n’。所以我们要启用Core.autocrlf,让系统自动管理行尾以便协调不同平台的共同开发,如果现在使用的是macOS或者Linux平台,设置core.autocrlfinput


初始化存储库

选择工作路径

通过cd切换工作目录

cd 这里写工作目录
#example:
cd C:/Users/xutao

创建项目目录

通过mkdir创建工作目录

mkdir 这里写命名
#example:
mkdir Moon

初始化存储库

在我们第一次将文件放到项目目录中前,我们需要先通过init初始化git存储库

git init

初始化之后,项目目录中将拥有一个隐藏的.git文件夹,这是git用来进行版本控制的文件,我们不用在意其细节。如果删除该.git文件夹,我们将丢失git存储库的项目历史。


Unix/Linux/git文件操作命令简介

删除文件

使用rm命令删除本地文件。这是一个Unix命令。

git rm file1.txt

在git中,更好的方法是使用git rm命令,这个命令会从工作目录和暂存区两个地方移除文件。


修改文件内容

使用echo命令修改文件。

echo hello world > file1.txt
echo ! >> file1.txt

以上代码将echo后面的文字写入>/>>后面的文件中,其中>为覆写,>>为附加到后面。如果没有找到同名的现成文件,会帮你新建一个,刚刚新建的文件是未追踪的。


修改文件名

Unix使用mv命令修改文件名,mv还可以用来移动文件目录。当我们修改文件名时,对于存储库来说如同删掉了一个旧文件并添加了一个新文件,虽然它们的内容是一样的。

mv file1.txt main.cpp

git提供了git mv来方便我们修改文件名的同时添加至暂存区。

git mv file1.txt main.cpp

Git工作流

暂存区(Staging Area)

现在,我们有了项目目录和git存储库,按照视频主的说法,那个隐藏的.git文件就是我们的git存储库,当然存储库可以在本地也可以在远程服务器。
每天,当我们对项目进行开发以后,我们将对项目的修改提交给存储库。在git中,我们还有一个额外的中间步骤,称为暂存区(Staging Area)或索引(Index)。我们提交的更改首先会放到暂存区,让我们可以对更改做出检查,如果一切正常,我们才将更改正式放到存储库。如果某些更改不应该发生,我们可以将这些更改拿出暂存,并且可以提交为下一次更改。


添加文件到暂存区

当我们向工作目录中添加了文件file1,可以使用add命令将file1添加到暂存区。使用*来将全部的特定后缀文件添加到暂存区,或者使用.来递归添加整个目录,请注意,以上批量添加很可能会使得很多不需要添加的文件也被添加进去。

git add file1.txt	
#or
git add file1.txt file2.txt
##or
git add *.txt
#or
git add .

将文件从暂存区提交到存储库

如果没有问题,使用commit命令将这个文件从暂存区提交到存储库。commit -m后面跟一个字符串作为对本次提交的说明。文件提交到存储库以后,git会开始对该文件进行追踪。

git commit -m "Commit file1"

有时需要对本次提交进行详细说明,一个字符串可能不够。这时可以直接git commit,这样会打开你的默认编辑器,你可以在默认编辑器中写提交说明。

git commit

注意了,暂存区中的文件提交以后并不会从暂存区中消失,你可以将暂存区作为对工作目录上一次使用add命令时状态的暂存。之后工作目录如果有更改(增删改),一样使用add命令更新暂存区。
提交不需要每次修改一点点代码就提交,也不要写个两三天再提交,提交应该作为项目生产过程中的“存档点”。一般来说,一天提交5-10次差不多。同样的,提交要在逻辑上分开,也就是说如果在一次修改中你修了一个BUG,并且添加了一些功能,最好是修改BUG提交一次,新功能提交一次,而不是两个不同类型的修改一次提交。


跳过暂存区

有时我们不一定要先添加到暂存区再提交,当你100%确定你的代码不需要审查时,使用git commit -a -m来跳过暂存区直接提交所有修改的文件。


查看git状态

使用git status查看git状态,其中红色字体表明没有提交到暂存区的文件更改,绿色字体表明文件更改提交到了暂存区。如果觉得git status很啰嗦,可以使用git status -s来查看短状态。

差异比较

可以使用git diff命令查看文件在暂存区和工作区的差异,或者git diff --staged来查看上一次提交的内容和暂存区之间的差异。

git diff
#or
git diff --staged

我们还可以使用可视化工具达成这一目的。在这里我们将使用VSCode。首先设置diff.tool。

git config --global diff.tool vscode
git config --global difftool.vscode.cmd "code --wait --diff $LOCAL $REMOTE"

接下来,我们就可以使用diff工具了

git difftool
#or
git difftool --staged

忽略文件

有时,工作目录下的有些文件不需要分享给其它人,比如个人的工作日志。这时我们可以通过添加一个叫.gitignore的文件,这个文件就叫.gitignore。将你想要让git忽略的文件或目录写到.gitignore中。

echo logs/ > .gitignore

需要注意的是,如果一个文件/目录已经被添加到存储库了,这时你再将其加入到.gitignore,git是不会忽略那个文件的,你只能在将文件添加到存储库之前将其添加到.gitignore才有效,原因是如果文件/目录已经提交了,git就已经开始追踪它了。如果出现了上述情况,将文件/目录从暂存区中删除就可以进一步删除存储库中的该文件。

git rm --cached -r bin/

git的提交中有什么信息

git的每一个提交包含:

  • 一个由git生成的唯一的标识符ID
  • 本次提交的修改内容信息
  • 提交时间/日期
  • 提交者信息
  • 当时项目的完整快照,用于快速回到项目的先前状态

查看所有历史提交

使用git log来查看所有历史提交,或者使用git log --oneline来得到一个简短的历史提交摘要,甚至可以加上--reverse来获得反向的摘要。


查看具体提交

使用git show后面跟上提交的标识符(只需要标识符中独特的一部分)或者头部指针来查看某个提交的具体信息。下面代码演示如何查看倒数第二个提交

git show 9e5d #假如这是倒数第二个标识符的独特部分
#or
git show HEAD~1 #头部指针向后退1位也就是倒数第二个提交

在版本之后使用:[文件名]命令查看文件在给定版本的具体内容(就是该文件在给定版本时是什么样自)。

git show HEAD~1:file1.txt

如果想查看某个版本提交中的所有文件和目录,使用git ls-tree命令。

git ls-tree HEAD~1

对于查找到的文件和目录,也可以使用git show查看。
git show做一个总结,show可以查看的信息有:提交、files(Blobs)、Trees(Directories)、Tags。


撤销add命令

老版本git使用git reset撤销git add命令,新版本可以使用git restore --staged

git restore --staged file2.txt

restore是如何做到这一点的呢。restore命令从下一个环境(next environment)获得拷贝。下一个环境是最近的一次向存储库的提交,所有基本上restore做的就是将文件上一次提交时的内容放回暂存区,这样就覆盖掉了最新一次的add命令。如果一个文件是新建的,第一次添加到暂存区,还没有添加到存储库中过,使用restore命令会直接将该文件从暂存器中移除。


丢弃本地更改

使用git clean命令批量删除新添加的本地文件

git clean -fd

将文件恢复到早期版本

要恢复文件,我们可以使用git restore命令撤销某次提交。

git restore --source=HEAD~1 file1.txt

主线(master)&分支(branch)

当你开发新东西时,你担心新东西会导致原来本来能好好运行的版本出现问题。通常情况下你会将老版本复制一份,再在其中一份上做实验。git提供的分支就可以帮助你做这件事。或者,你有一个团队共同开发一个项目,你就可以将项目划分为多个分支来将任务分配给不同的开发者。
要在分支上工作,首先我们需要创建一个新分支。下面代码演示了如何创建一个叫develop的分支。你可以在任何分支下创建分支,新分支会以创建它的分支为参考。

git branch develop

现在分支有了,使用以下代码切换到分支上工作。接下来,在分支上就可以大胆开发新功能。

git checkout develop

当你完成分支上的工作以后,一般都需要将分支合并(Merging)到主线,或者创建他的分支。

#feature来自分支develop
git merge feature

更多分支相关的东西可以点击链接


git数据存储方式简介

前面提到,git会存储当时项目的完整快照,实际上git的数据存储相当的高效,git会对数据进行压缩,并且不会存储重复的内容。当然,git具体如何存储数据,这个作为使用者可以不用关心。正是因为git的提交直接存储了当时项目的完整快照,才能够做到快速回到项目的先前状态。如果存储的是每一次的更改,返回先前状态则需要进行计算。


最后

很遗憾,第一个教程只讲了一小时内容,还有4小时高级内容付费才能看。

猜你喜欢

转载自blog.csdn.net/qq_37856544/article/details/118785640