Git学习笔记

对于git,很早很早就在用了,但是还没有系统整理过,并且有些命令使用时需要注意的事项,在此也一并标出。

About Git

git是一个分布式版本控制工具,如果你是一个程序猿,那你必须要学会如何使用git来管理你的代码或者项目。 可能更多人所熟知的是GitHub,顾名思义,按照英语的命名特点,GitHub就是所有git上传的枢纽,汇聚到一起,你可以开源你的代码,指定一款开源协议共享给所有需要的人,也可以将仓库设为私有,只有自己或者受到邀请的人可见或者进行编辑。 除了GitHub,世界上还有很多这种代码托管平台,比如国内的gitee,coding等,国外还有gitlab等平台提供代码托管服务。

Setup

在一个目录中,你可以使用git init来初始化这个目录,git会把这个文件夹变为一个git目录,

1
2
> GitTest git init
Initialized empty Git repository in /Users/username/GitTest/.git/

使用git remote add origin {your repo url} 即可添加远程的仓库地址。

Commit && Push

对于一个采用迭代式开发或者其他开发模式的项目来说,都避免不了后续对代码进行修改或者添加一些新的文件,对于每一次这样的操作,都要对添加或者修改的文件指定一个commit。 例如:修改了项目功能中的bug,文件名字为a.cpp 可以使用

1
2
git add a.cpp
git commit -m "fix: the bug in xxx"

这样就可以将此次更改添加到提交的队列中 如果使用git add .,git将添加所有监控的文件到缓冲区 再使用git push就可以将修改添加到远程仓库中

对与一个团队而言,有标准规范的commit格式是很重要的,例如以下格式

1
2
3
4
5
feat: 新功能feature
fix: 解决bug
add: 添加模块
update: 更新模块
... 等等

Dangerous Pull ing

如果是多人协作开发,那么必然会导致本地文件之间存在着不一致,为了解决这个问题,可以使用git pull,执行该命令后将同步仓库中存在并且与本地不同的文件。 这个操作看似简单,但是有时候如果使用了–force强制执行的话,会覆盖掉本地的文件,属于非常危险的操作,所以无论在什么时候使用–force之前都要思考清楚自己在干什么。

Branch

我觉得git很强大的一个功能就是对分支的管理,在不同分支中切换可以让项目的代码得到更有效的管理,例如在main主分支中保存可以稳定运行的版本,在另一个dev分支中保存正在开发的非稳定版,后续改进之后可以将dev分支合并到main分支中去。 如果更新过后的主分支依然出现问题,也是可以通过回滚的方式回到之前某个稳定的版本。 分支的创建也非常简单

1
2
git branch name
git checkout name

切换后git所有的操作将在新的分支进行

.gitignore

顾名思义,肯定是让git去忽略某些项目,比如文件夹,或者是单个文件,添加到gitignore之后git将不在追踪这些文件的变化,因此我们可以将例如npm庞大的node_modules这种文件夹添加到其中,或者是编译器调试产生的临时文件,优化仓库的存储结构。

1
git status

使用该命令看查目前项目的改动

1
2
3
4
5
6
On branch dev
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	b.cpp

nothing added to commit but untracked files present (use "git add" to track)

git监控到了文件b.cpp的产生,我们将b.cpp添加到.gitignore中

1
2
On branch dev
nothing to commit, working tree clean

再次使用git status看查,发现b.cpp已经不再被监控了,在.gitignore中还可以使用文件夹名忽略整个文件夹的项目,或者使用通配忽略包含特定后缀名的文件等。

End

随着开发工具的现代化,很多时候我们已经用不到这些git命令了,很多繁琐的命令早已被图形化的界面取代,但不乏还有git爱好者们做出的努力,如lazygit等工具。 当你接收一台崭新的服务器时,这些命令又显得格为重要了。因此,在简便的工具的包裹下,他们背后的原理才是最值得我们去了解的,就如同学习汇编语言一样,给力我们另一种看待程序的方式。 很早就像总结一下git了,拖了这么久终于写完了,后续还想再添加一些更具体的内容,希望能给初入git的同学一些启发。

0%