Git学习笔记
版本控制系统有两类:集中式和分布式。
集中式版本控制系统诸如CVS(Concurrent Version System)
、SVN(Subversion)
等,都有一个集中管理文件版本的中央服务器,协同工作的人需要从中央服务器获取最新的版本,修改文件后再推送到中央服务器。缺点是必须联网,且中央服务器出现单点故障后,无法提交更新。
分布式版本控制系统像Git、Mercurial、Bazaar等,分布式版本控制系统没有中央服务器,版本控制是在本地进行的,每个人电脑上都有一个完整的版本库,断网也可以进行开发。
最快、最简单也最流行的当然是Git!
代码托管中心是基于网络服务器的远程代码库,一般称为远程库。
局域网:GitLab
2. 工作机制
Git是一个免费的、开源的分布式版本控制系统,可以快速高效地处理从很小到非常大的项目。
Workspace:工作区、Index/Stage:暂存区、Repository:仓库区(本地仓库)、Remote:远程仓库
3. Git安装
Git的安装步骤较为简单,此处略。
4. Git常用命令
4.1 设置用户签名
git config --global user.name "你的名字"
git config --global user.email "你的邮箱"
--global
参数表示全局参数,表示此电脑的Git仓库都会使用这个配置,运行命令后,会在C:\Users\用户
用户主目录中出现一个.gitconfig
文件,用文本编辑器打开可以看到配置好的信息。
git config --global color.ui true
Git会适当地显示不同的颜色。
4.2 初始化本地库
git init
运行命令后,当前目录下多了一个.git
的目录(需要显示隐藏文件),这个目录是Git来跟踪管理版本库的。
4.3 添加暂存区
git add 文件名或点(.)
将工作区的指定文件(.代表当前目录下所有文件)添加到暂存区,被添加的文件状态从未跟踪Untracked
变为暂存Staged
可以多次add不同文件。
注意:Git是跟踪和管理修改的,如果某次修改没有添加到暂存区,那么commit时就不会提交到本地库。
git rm --cached 文件名
可以将暂存区的文件状态还原为未暂存Unstaged
即未跟踪Untracked
。
4.4 提交本地库
git commit -m "说明信息"
将暂存区的文件提交到本地库并附加上本次代码提交的说明信息,一次可以commit很多文件。
4.5 查看状态![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b2795d5253b243cd4aabc7645cb8a1f5.png#pic_center)
git status
可以随时查看当前本地库的状态。
git diff 文件名
可以通过对比查看具体修改了文件的哪些内容。
git checkout -- 文件名
可以将文件在工作区的修改全部撤销,使文件回到最近一次git commit
或git add
时的状态。
git reset HEAD 文件名
可以把暂存区的修改回退到工作区,当我们用HEAD
时,表示最新的版本。
4.6 查看日志
git log [--pretty=oneline]
显示从最近到最远的提交日志,--pretty=oneline
参数相当于简洁模式。
git reflog
显示本地库的所有commit⽇志。
git reset --hard HEAD^或HEAD^^或HEAD~100
回退到上一个版本或上上个版本或向前推第100个版本。
git reset --hard commitId
指定回到未来的某个版本,commitId
为版本号。
5. GitHub/Gitee使用
5.1 SSH免密登录
1.创建SSH Key
ssh-keygen -t rsa -C "你的邮箱"
运行命令后,会在用户主目录里生成一个.ssh
目录,有id_rsa
和id_rsa.pub
两个文件,这两个就是SSH Key的秘钥对,id_rsa
是私钥,id_rsa.pub
是公钥。
2.登录GitHub,粘贴
id_rsa.pub
文件的内容
5.2 远程仓库
在GitHub上创建一个远程仓库
git clone 远程库地址
如果本地没有代码仓库,可以通过此命令将远程库克隆到本地,或者使用git init
命令在本地初始化一个仓库。
git remote add 远程库别名 远程库地址
如果本地有代码仓库,可以通过此命令将远程库和本地库关联,origin是默认远程库名字。
git push [-u] 远程库别名 master
第一次推送本地库master分支的所有内容,之后可以省略-u
参数。
git remote [-v]
查看远程库名字和地址对应信息。
git remote rm 远程库名字
解除本地和远程的绑定关系。
5.3 分支使用
git checkout -b 分支名 或者 git switch -c 分支
创建分支并切换到该分支,切换分支去掉-b
或-c
即可。
git branch
列出所有分支,标注星(*)号的是当前所处在的分支。
git merge [--no-ff] 分支名
合并指定分支到当前分支上,加上--no-ff
参数就可以用普通模式合并,合并后的历史有分支,能看出来曾经做过合并,而Fast-forward
合并就看不出来曾经做过合并。无冲突的话默认是Fast-forward
模式,有冲突的话需要手动合并。
git branch -d 分支名
删除指定分支
5.4 Bug/Feature分支
创建临时的Bug分支修改Bug,创建Feature分支来开发新需求、新功能。
git stash
可以将当前工作现场临时存储,之后再恢复。
git stash list
查看临时存储的代码。
git stash apply [stash@{index}]
git stash drop
恢复之前的工作点,并删除stash内容,加上stash@{index}
代表恢复到某个现场。
git stash pop
恢复现场的同时把stash内容也删除。
git cherry-pick commitId
将指定的提交应用于其他分支。
git branch -d或-D 分支名
删除分支,-D
表示强行删除。
5.5 标签管理
发布一个版本时,通常先在版本库中打一个标签(tag),实际上就是指向某个commit的指针。
git tag 标签名
在需要打标签的分支上运行,就得到一个新标签。
git tag
查看所有标签。
git tag 标签名 commitId
给某次提交打标签。
git show 标签名
查看标签信息。
git tag -a 标签名 -m "说明信息" commitId
创建附加说明信息的标签,用-a
指定标签名,-m
指定说明文字。
git tag -d 标签名
删除指定标签,删除远程标签也需要先从本地删除,再推送到远程。
git push origin 标签名或--tags
推送指定标签到远程库或所有标签。
5.6 团队协作
git branch --set-upstream-to=origin/远程分支名 本地分支名
指定本地分支与远程分支的链接。
git pull 远程地址别名 远程分支名
拉取远程库代码,并合并到当前分支,如果有冲突要手动解决。
5.7 跨团队协作
在GitHub或Gitee中fork可以将别人的项目叉到自己的仓库,pull request可以向对方发出拉取请求。
5.8 忽略文件
当我们提交代码时,总有一些配置文件或其他后缀的文件不需要提交,GitHub提供了一些配置文件可以参考。
5.9 配置别名
git config --global alias.别名 代表的单词或命令
Git配置文件放在用户主目录下的一个隐藏文件.gitconfig
中。