Git使用与心得体会
Git使用与心得体会
一.闲聊
闲暇时间学一下Git,也算是不用在网页端操作github了
二.Git相关
集中式与分布式
Git是一个分布式的版本控制系统,而传统的SVN则属于集中式
集中式与分布式的区别:
-
集中式版本控制中心只有中心服务器有一份代码,而分布式则是每个人的电脑上都有一份完整的代码
-
集中式版本控制中心存在显而易见的安全性问题,当中心服务器挂掉后,所有人都无法正常工作了
-
集中式版本控制需要联网才能工作,因为你需要和中心服务器进行交互,如果你的网络状况不佳,那么使用体验会令用户无法忍受,而分布式管理控制则无需联网即可进行
-
分布式版本控制新建、合并分支的操作速度十分迅速,而集中式版本控制新建一个分支就相当于复制了一份完整的代码
中心服务器
中心服务器可以用来交换每个用户的修改,虽然实际上没有中心服务器我们也可以工作,但中心服务器能够保证24小时持续开机,更加方便用户的交换修改。
Github、Gitee就是中心服务器
工作流
当我们执行mkdir
以及git init
之后,我们所新建的directory就成为了一个工作区,工作区的目录内还有一个隐藏目录.git
,它存储的是git的版本库。
- git add
把文件修改添加到缓存区 - git commit 把缓存区的修改提交到当前分支,提交后缓存区就会被清空
- git reset --
使用当前分支上的修改覆盖缓存区,工作流是由History到Stage的,即我们撤销了最新一次的git commit操作 - git checkout --
将缓存区的修改覆盖工作区,即我们撤销了最新一次的本地修改
我们也可以跳过暂存区域直接从分支中取出修改,或者直接提交修改到分支中。
- git commit -a 直接把所有文件的修改添加到暂存区然后执行提交
- git checkout HEAD -- files 取出最后一次修改,可以用来进行回滚操作
分支实现
Git使用指针将每个提交连接成一条时间线,而Head指针则指向当前分支
新建分支时,我们新建一个指针指向时间线的最后一个节点,并让Head指向新的分支
我们的每次提交只会让当前分支指针向前移动,而其他分支指针则不会移动
合并分支通过改变指针即可
冲突
当两个分支都对同一个文件的同一行进行了修改,在分支合并时就会产生冲突
Git 会使用 <<<<<<< ,======= ,>>>>>>> 标记出不同分支的内容,只需要把不同分支中冲突部分修改成一样就能解决冲突。
<<<<<<< HEAD
Creating a new branch is quick & simple.
=======
Creating a new branch is quick AND simple.
>>>>>>> feature1
Fast forward
快进式合并,会直接将master分支指向合并的分支,但这样会导致丢失分支信息
我们可以在执行git merge
操作时加上--no-ff参数来禁用此模式,并加上一个-m让合并时产生一个新的commit
$ git merge --no-ff -m "merge with no-ff" dev
储藏(Stashing)
在一个分支上操作之后,如果我们还没有提交,那么我们切换分支,在另一个分支上也能看到新的修改。原因是因为所有分支共用一个工作区。
但我们可以使用git stash
命令将当前分支的修改储藏起来,此时工作区的所有修改会被存入到栈中,也就是说工作区处于一个没有任何未提交修改的状态。这时就可以切换到别分支了。
$ git stash
Saved working directory and index state \ "WIP on master: 049d078 added the index file"
HEAD is now at 049d078 added the index file (To restore them type "git stash apply")
该功能可以用于 bug 分支的实现。如果当前正在 dev 分支上进行开发,但是此时 master 上有个 bug 需要修复,但是 dev 分支上的开发还未完成,不想立即提交。在新建 bug 分支并切换到 bug 分支之前就需要使用 git stash 将 dev 分支的未提交修改储藏起来。
个人感觉有点像Win的睡眠和休眠?
SSH传输设置
Git 仓库和 Github 中心仓库之间的传输是通过 SSH 加密的。
如何配置Github的SSH密钥网上很多,不赘述了。
.gitignore文件
忽略以下文件:
- 操作系统自动生成的文件,比如缩略图;
- 编译生成的中间文件,比如 Java 编译产生的 .class 文件;
- 自己的敏感信息,比如存放口令的配置文件。
Git基本操作
三.Tips
Git中可以使用gitk
这个命令来打开图形化的管理界面,虽然现在很多IDE集成了强大的Git功能或者专门有Git软件就是了……