前言
提示:这类工具,像git、maven、IDEA等等,需要理解的知识不是太多。要想熟练使用,理解命令的含义即作用是不够的,需要我们不断的去使用它。
- 所以本篇作为git学习笔记总结将大概讲解git是什么有什么用及相关基本常识,其他实操还得靠平时。
基本介绍(是什么)
提示:当然正经代码人管理代码不可能忽视git。但作为先接触GitHub再学Git的过来人提示,好好过一遍Git基础,这个Linus花了两周时间自己用C写了一个分布式版本控制系统很简单也很基础,可以避免后期很多GitHub使用上的错误麻烦。.
Git迅作为最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
git:版本管理工具(本地的)。不是记录文件本身,而是文件变化。
git:分布式版本控制系统,本地有镜像,无网络时也可以提交到本地镜像,待到有网络时再push到服务器。
CVS/SVN:非分布式(集中式的版本控制系统),无网络不可以提交。
GitHub:项目托管平台(网络开源的)
gitlab: 私人项目或者企业项目
gittee: 国内的Git托管服务
使用流程(有哪些作用)
提示:
参考学习廖雪峰的git教程
安装Git
参考快速搭建git开发环境+GitHub使用+TortoiseGit
创建版本库
此处由git创的本地库(暂存区),不需要网
初始化一个Git仓库,使用git init
命令。
添加文件到Git仓库,分两步:
使用命令git add <file>
,注意,可反复多次使用,添加多个文件;
使用命令git commit -m <message>
。
版本利用管理(类似日志管理)
HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id
。
穿梭前,用git log
可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog
查看命令历史,以便确定要回到未来的哪个版本。
工作区和暂存区(概念了解)
或者理解:Git 版本管理分三个区域:工作区,暂存区,版本区(库)
撤销修改
前提是没有推送到远程库。
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- file
。
场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD <file>
,就回到了场景1,第二步按场景1操作。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本管理。
教训:注意提交出错后别慌,别搜百度乱操作,不好解决的问题学会撤销。
删除文件
命令git rm
用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。
添加远程仓库(推上网)
将本地代码库与远程仓库(GitHub是其中一种)连接同步
要关联一个远程库,使用命令git remote add origin git@server-name:path/repo-name.git;
关联一个远程库时必须给远程库指定一个名字,origin是默认习惯命名;
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改;
分布式版本系统的最大好处之一是在本地工作完全不需要考虑远程库的存在,也就是有没有联网都可以正常工作,而SVN在没有联网的时候是拒绝干活的!当有网络的时候,再把本地提交推送一下就完成了同步,真是太方便了!
从远程库克隆(拉到本地)
要克隆一个仓库,首先必须知道仓库的地址,然后使用git clone
命令克隆。
Git支持多种协议,包括https,但ssh协议速度最快。
只要你有git配有秘钥(ssh)可以克隆所有开源仓库代码
分支管理
一种常见的3分支工作流模式
创建3个工作分支:
开发分支:dev
测试分支:test
发布分支:pub
注:通常也可以直接用 master 分支当作 dev 分支
当然Git鼓励大量使用分支(这些都是个性化的)
master: 主分支,主要用来版本发布。
develop:日常开发分支,该分支正常保存了开发的最新代码。
feature:具体的功能开发分支,只与 develop 分支交互。
release:release 分支可以认为是 master 分支的待测试版。比如说某一期的功能全部开发完成,那么就将 develop 分支合并到 release 分支,测试通过并且到了发布日期就合并到 master 分支,进行发布。
bug分支:线上 bug 修复分支。
创建与合并分支
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>或者git switch <name>
创建+切换分支:git checkout -b <name>或者git switch -c <name>
合并某分支到当前分支:git merge <name>
删除分支:git branch -d <name>
解决冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。个人觉得最粗暴方法冲突解决不了就弃分支。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log --graph
命令可以看到分支合并图。
多人协作
多人协作的工作模式通常是这样:
1,首先,可以试图用git push origin <branch-name>
推送自己的修改;
2,如果推送失败,则因为远程分支比你的本地更新,需要先用git pull
试图合并;如果合并有冲突,则解决冲突,并在本地提交;
3,没有冲突或者解决掉冲突后,再用git push origin <branch-name>
推送就能成功!
4,如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
。
个人建议以防冲突先用git pull
合并再推送
Rebase
(了解)
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
标签管理(版本号代替复制commit id)
一般在发布版本的时候会创建一个tag(git标签),便于后面跟踪和回滚。
Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针
版本库——commit:6a5819e.——tag v1.2(版本号)
创建标签
命令git tag <tagname>
用于新建一个标签,默认为HEAD,也可以指定一个commit id;
命令git tag -a <tagname> -m "blablabla..."
可以指定标签信息;
命令git tag
可以查看所有标签。
管理标签
命令git push origin <tagname>
可以推送一个本地标签;
命令git push origin --tags
可以推送全部未推送过的本地标签;
命令git tag -d <tagname>
可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>
可以删除一个远程标签。
搭建Git服务器
在远程仓库一节中,我们讲了远程仓库实际上和本地仓库没有不同,纯粹为了7x24小时开机并交换大家的修改。
GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。
最后
还想知道啥就去官网吧!
git官网
其他常识
提示:这里总结
- 越早知道git是什么及其运用越好
- 知道git全部用途,比你出错时满世界搜解决方案绝对轻松
- 命令过一遍回过头平常用的就几个
常用命令
1. git init (初始化git)
2. git remote add origin <远程git地址> (与远程仓库建立连接)
3. git fetch origin <分支名称> (把远程分支拉到本地)
4. git checkout -b <本地分支名> origin/<远程分支名> (在本地建立分支与远程分支建立连接并切换到该分支)
5. git pull origin <远程分支名> (拉取分支内容到本地分支)
6. git reset --soft origin/master
7. git stash
8. git stash pop
9. git push origin HEAD:refs/for/分支名
git reset --soft HEAD~1
git diff
git status
git add 文件1路径 文件2路径 ...
git checkout 文件路径
idea的使用
idea---git---compare不同分支