【代码管理,从小抓起】(一)
熟练使用Git & Github,方便实验室共用分析脚本。
本篇文章整理了自己的一些Git笔记。
什么是Git?
一个免费和开源的分布式版本控制系统,旨在快速 & 高效地处理从小型项目到大型项目地所有项目。
功能概述:
- 记录不同时间点的文档状态
- 还原对应版本的文档(将编辑过的文档复原到以前的状态)& 显示编辑前后的内容差异
一些基本概念
数据库(Repository)
概述:记录文件或目录状态的地方,存储着内容修改的历史记录。可以分为:远程数据库,本地数据库(个人使用)
数据库将文件和目录修改的历史记录放在对应的目录下。
暂存区和工作区
暂缓区,位于.git/
下,为git add
文件添加修改的目的地,被称为index或stage。
git commit
是将暂缓区中的所有内容提交到当前分支。
工作区,为.git
文件夹存放的位置。
初始配置
Git属于分布式版本控制系统,因此每一个用户都需要自报家门:Github ID和Github注册时所使用的邮箱,
使用
--global
参数,代表此机器上的所有Git仓库均使用该配置。
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
仓库初始化基本操作
1、初始化仓库
功能概述:将当前目录变为Git可以管理的仓库,并在当前文件夹下生成一个.git
文件夹
使用命令:git init
一些注意事项,
- Git只能跟踪文本文件的改动(e.g.
.md
文件、.txt
文件。不能修改Word是因为其为二进制文件) - Git能报告文本文件改动的准确信息(e.g. 第n行进行了修改),但对于图片其只能报告改变的大小
- 不建议使用Windows自带的记事本编辑任何文本文件 —— 自动在文件开头添加
0xefbbbf
的字符
本地仓库管理操作
1、添加文件到暂缓去
使用命令:gti add <filename>
# 示例代码
echo "git is great" > readme.txt
git add readme.txt
2、提交文件到仓库(将add
选定文件添加到仓库)
使用命令:git commit <message>
一些参数,
-m # 后接本次提交的说明语句
# e.g. git commit -m "wrote a readme file"
一些注意事项,
-
git commit
执行成功后,会显示文件的改动信息,例如:1 file changed
、2 insertions
(插入了2行内容)等
3、查看仓库动态
使用命令:git status
4、查看文件动态
使用命令:git diff <filename>
5、查看仓库历史
使用命令:git log
一些参数,
--pretty=oneline # 单行显示
6、回退文件
使用命令:git reset <filename>
一些参数,
--hard # 后接版本号。
# e.g. HEAD代表上一个版本,HEAD^代表上上个版本,HEAD~100代表上一百个版本
一些注意事项,
- 不需要输入全部的版本号,开头几位即可
7、撤销修改
使用命令:git restore <filename>
8、删除文件
使用命令:git rm <filename>
,即将版本库中的对应文件给删除。
远程仓库管理操作
Github —— 全球最大的同性交友网站,用于充当24小时都开机的服务器,存放原始仓库。
克隆和推送自己的仓库,需要先配置SSH密匙 —— 为了确保是本人对仓库进行操作。
1、建立本地仓库与远程仓库的连接
使用命令:
git remote add origin git@github.com:username/reponame.git
2、将本地仓库内容推送至远程库上
使用命令:git push
一些参数,
-u | --set-upstream #
示例代码,
git push -u origin master # 将本地的master分支推送到远程的origin分支,并将本地和远程的master分支进行关联
3、删除远程库
使用命令:git remove rm
示例代码,
# 推荐在删除之前先查看下远程库信息
git remote -v
git remote rm origin
4、克隆远程仓库
使用命令:git clone <reponame.git>
一些注意事项
- 关联远程库的时候,需给其指定一个名字。默认/习惯使用
origin
- 在第一次使用
git push -u origin master
之后,此后只使用git push origin master
即可(已完成了关联)
示例
1、提交文件到仓库 & 回退文件至初始状态
# 提交第一个版本的文件
echo "git is great" > readme.txt
git add readme.txt
git commit -m "og"
# 提交第二个版本的文件
echo "git is very great" > readme.txt
git add readme.txt
git commit -m "second"
# 查看两个文件之间的区别
git log
# Author:
# Date: Sun Jun 26 16:32:20 2022 +0800
#
# second
#
# commit bb9ed7df4f625d65f7cedbb6c19d4bba8b94a26a
# Author:
# Date: Sun Jun 26 16:30:55 2022 +0800
#
# og
git log --pretty=oneline # 单行显示版本
# 文件版本回退
git reset --hard HEAD^
一些说明,
- 使用
git log
得到的commit
信息为Git创建的提交信息(版本号)
2、理解“Git只管理修改”
cat readme.txt
# git is great
# 第一次修改文件内容
echo "git is very great" >> readme.txt
# 添加文件到暂存区
git add readme.txt
# 第二次修改文件内容
echo "git is very very great" >> readme.txt
# 添加文件到仓库
git commit -m "understand how changes work"
# 查看仓库动态
git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git restore <file>..." to discard changes in working directory)
# modified: readme.txt
#
# no changes added to commit (use "git add" and/or "git commit -a")
从git status
中,得到的结论是 —— 第二次的修改没有被提交。原理如下:
第一次add
将readme.txt
添加到暂存区,虽然进行了第二次修改,但是最后提交的是已放入暂存区中的、第一次修改过的文件,而非第二次修改的文件(因其未被添加到暂存区)。
3、从本地仓库中删除文件
# 删除文件
rm -rf readme.txt
# 查看文件状态
git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git restore <file>..." to discard changes in working directory)
# deleted: readme.txt
#
# no changes added to commit (use "git add" and/or "git commit -a")
# 将版本库中的文件也删除
git rm readme.txt
# 将删除文件复原(版本库中存放了原始文件)
git restore readme.txt
4、上传本地仓库到Github
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:username/reponame.git
git push -u origin main