最近抽休息时间出来学习了一下Git。
以前就对Git很感兴趣,现在再次让我坚定了对Git(Linus)的信仰。
如果使用的是VSCode就完全没必要使用指令啦23333。
Git简介
Git与SVN等版本控制系统不同。
SVN等版本控制系统是集中式版本控制系统。
也就是说每个人每一次对项目进行更改都需要从中央服务器获得最新的版本才能进行处理。
不难想象,如果是一个很大的项目,使用集中式版本控制系统效率是非常低下的。
Git是分布式版本控制系统。
SVN等集中式版本系统记录的是文件本身,而Git记录修改。
这也就意味着Git是非常高效的(无论是从时间还是从空间来讲)。
并且,记录修改可以不要求每个人都需要从远程服务器下载最新版本,每个人的电脑内部就有所有的版本。
Git原型是Linus用了一周开发出来的。
关于Git的运行机制这里就不详讲了(就是几个指针指来指去),已经偏题啦~
注意Git不能管理图像(除svg)文件,仅能管理文本文件
本地管理
1 | git init |
将所在文件夹使用Git进行初始化。
1 | git add <file> |
向暂存区中加入文件。
1 | git rm <file> |
记录删除操作,并删除本地文件。
若对文件夹进行操作,在末尾加上’/‘
1 | git commit -m "instruction" |
将处于暂存区的文件提交到版本库,记录为新的版本(commit)。
1 | git checkout -- <file> |
若修改了文件尚未提交提交进暂存区,想要舍弃更改可以使用本命令。
若旧文件已提交到暂存区,将文件从暂存区恢复。
否则,将文件恢复到版本库最新版本。
1 | git reset HEAD <file> |
若修改了文件且已经放入暂存区但尚未提交到版本库,想要舍弃提交到暂存区的文件可以使用本命令。
使用了本命令后将暂存区的文件放回本地。
1 | git reset <commit> |
将当前版本重置为<commit>
所在的版本,<commit>
也可以替换为HEAD^
,表示上一个版本,HEAD^^
表示上上个版本,HEAD~100
表示上$100$个版本。
1 | git status |
查看当前Git的提交状态。
1 | git log |
查看历史版本信息。
使用--pretty=oneline
参数可以将每个版本的信息压缩为一行。
1 | git diff <commit> -- <file> |
比较<commit>
版本与当前的文件区别。
分支管理
1 | git branch <branch> |
创建新分支。
1 | git branch -d <branch> |
删除分支。
如果要删除未合并的分支(舍弃分支),则将-d
替换为-D
。1
git branch -r -d origin/<branch>
删除本地的远程分支。1
git push origin -d <branch>
删除服务器上的远程分支。1
git checkout <branch>
切换到<branch>
分支,使用参数-b
可以创建并切换到新分支。
1 | git merge <branch> |
将<branch>
分支合并到当前分支。
默认使用Fast Forward
合并。
1 | git merge --no-ff -m "instruction" <branch> |
不使用Fast Forward
合并,需要留下合并信息。
1 | git log --graph |
查看分支合并图。
1 | git stash |
将当前未提交到暂存区的文件暂时储存起来,恢复到最新版本。1
git stash list
查看被储存起来的工作区。
1 | git stash apply <stashid> |
恢复暂存工作区但不删除。
1 | git stash pop <stashid> |
恢复暂存工作区且删除。
1 | git stash drop <stashid> |
删除暂存工作区。
远程仓库
1 | git clone <repo> |
从<repo>
仓库克隆到本地。
1 | git remote -v |
查看远程库信息。
1 | git remote add origin <repo> |
添加<repo>
仓库的链接,命名为origin
。
1 | git push origin <branch> |
推送<branch>
分支到远程仓库
1 | git checkout -b <branch1> origin/<branch2> |
在本地创建与远程分支对应的分支。
1 | git branch --set-upstream-to=origin/<branch1> <branch2> |
将<branch2>
分支与<branch1>
远程分支链接。
举例:<upstream>
可以是origin/dev
。
1 | git pull |
抓取远程仓库的更新。
标签管理
我们可以给一些commit打上标签(tags),标签与Github的release对应。
1 | git tag <name> [commit] |
给[commit]
打上标记<name>
,[commit]
默认为HEAD
。
1 | git tag -a <name> -m "instruction" [commit] |
给出指定信息的标签。
1 | git tag -s <name> -m "instruction" [commit] |
使用PGP签名标签。
1 | git tag |
查看所有标签。
1 | git tag -d <name> |
删除标签
1 | git push origin <name> |
推送(所有)标签到远程
1 | git push origin :refs/tags/<name> |
删除远程标签(需先删除本地标签)