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即可。

原文地址:https://www.cnblogs.com/mySummer/p/12104323.html