git笔记
#)git和svn的区别:
①git是分布式的版本管理工具。
安装了git的电脑,相当于在自己电脑上有一个版本管理服务端。
自己写的代码,通过add,commit之后,已经在自己电脑端的git服务器上有版本记录了。
push之后,才到远程服务端。
因此,相当于每个电脑都是一个微服务端,然后又都和远程服务端关联。因此是分布式的版本管理。
优点:断网情况下,也可以进行版本管理。
但本地的版本信息都在版本库的.git文件中存储,这个文件一旦损坏丢失,本地的版本信息也就丢失了。
但push到远程服务端的版本信息,只要服务器没问题,就不会丢。
②指针
svn的分支是copy文件创建的,因此速度较慢。git的分支是使用指针实现的,创建分支只需要移动指针,因此速度很快。
#)git的区和文件的状态
**)我自己认为,git的区可以分为3个,工作区、版本库、远程库。
工作区:在本地写代码的区域
版本库:add和commit之后代码所在的区域
远程库:push之后代码所在的区域
廖雪峰网站上的这个图,对我很有启发,感谢廖雪峰老师!
**)git中文件所处的状态
我认为有4种状态:工作区未stage的、stage区的(待commit)、commit区的(待push)、远程库的(已push)。
根据这4种状态,做不同的操作。
工作区未stage的:做stage操作。通过add命令,或者sourcetree工具的stage操作。
工作区未stage,但此文件已经在远程库上的,做revert操作,将文件回归到远程库的,丢弃工作区的更改。
stage区的:做commit操作,可以提交文件。做unstage操作,可以将文件撤销回工作区,回到未stage的状态。
commit区的:做push操作。
push区的:供其他人pull。
#)git工具
git常用的服务平台有:
GitHub、
Gitee(码云),中文版的GitHub
GitLab:适合公司搭建自己的git服务平台
bitbucket
git常用的操作客户端有:
IDEA:自带git插件,操作菜单可以满足日常工作需要。terminal的命令行,和git客户端的功能一样。
git客户端:git bash:彩色的界面,强大的命令功能。是操作git的首选。通过它,没有解决不了的问题。
git客户端:git GUI:git自带的GUI,功能虽全,但易用性不是特别高。个人认为比较鸡肋。
sourceTree:第三方的GUI。易用性很高,小白也可以通过简单易用的界面,较快的熟悉使用方法。并且脱离开发环境,适合非开发人员使用,用来下载、更新文件。
TortoiseGit:小乌龟的git系列。
##)sourcetree中,“拉取”pull和“获取”的区别:
和上图的道理类似,“拉取”是,把指针指向某个位置,并且把工作区的文件更新到这个位置。
“获取”是,把指针指向某个位置,但并没有把工作区的文件更新过去。所以在GUI的操作中,获取之后,还要做merge操作,才可以实现“拉取”的效果。否则,“获取”之后,在自己电脑上,是看不到代码变化的。
*)git推送代码到远程仓库时,产生自动分支合并的问题:
参考以下:
https://www.cnblogs.com/Sinte-Beuve/p/9195018.html
https://blog.csdn.net/xiaosi_xiaosi/article/details/81336077
简言之:
当本地已经commit,并且和远程仓库无法直接融合代码时,本地分支和远程分支是2个不同分支,无法直接融合,所以会有一个分支合并的过程。
要避免这个分支合并(个人感觉,为了提交日志好看,这样做没啥必要),可以有以下方法:
当本地代码和远程仓库代码可能冲突时,
方法1:先pull,(可能会冲突,需要解决冲突)再add、commit本地代码,再push。
方法2:先add、commit本地代码,再fetch,然后手动rebase,(可能会冲突,需要解决冲突)再push。(这个是从网上看的,需要实际测试验证一下步骤)
*)git常用命令
除了git init,git add <file>,git commit -m "xxx",git pull,git push,这些常用命令以外,还有以下较常用命令:
git status 查看仓库中文件的状态
git diff 查看文件和版本库中的不同
git add --help :git的任意命令,后面加上--help,可以在浏览器中打开帮助文档。
git log :查看提交历史记录(包括版本号)
git reflog :查看代码回到之后某个版本之后,进行的每次的命令操作。
git reset HEAD <file> :reset到版本库版本(git的命令会提示,是回到unstage状态)
git checkout --<file> :丢弃工作区某个文件的修改
如果没有--,这个命令就表示切换到另一个git分支了。
git rm <file> :删除文件(之后再进行commit、push等操作)
git remote add origin git@github.com:账号/本地仓库名.git
git push -u origin master:当远程仓库是空仓库时,把本地分支master推送到远程master分支,并把本地master和远程master关联起来。
-u 的作用:是记住本地仓库和远程仓库的关联,下次不需要再写为git push origin master,直接写git push即可。