Git基础学习总结
- Git是一种版本控制工具,是记录一个或若干文件内容变化,保证多人协作不出问题
- 版本控制工具:diff、patch、RCS、CVS、SVN、Git
- Diff:比较两个文件或者目录之间的差异;记录差异;
- Patch:是diff的反向操作;根据差异和一个文件可以推出另一个文件内容;
- RCS:最早期的本地版本控制工具;
- CVS & SVN:集中式版本控制工具;狭窄的提交通道、数据安全性差(单点故障、黑客攻击);
- CVS:1985,不支持原子化操作,网络传输效率低;
- SVN:取代CVS,适合局域网;
- Git:Linus的第二个伟大作品,灵感来自BitKeeper,分布式版本控制工具;
- 集中式(脆弱的中央库):对服务器要求高,不安全,存在单点故障,备份极其重要,不适合开源项目,强调集中管理;
- 分布式(强势的分布库):提交为本地操作,数据全完整,每一部分都是完整的数据,安全性高,适合分布式开发,强调个体;
- SVN不适合领域:
- 跨地域的协同开发;
- 对待吗的干质量追求和代码门禁;
- Git不适合领域:
- 不适合Word等二进制文档的版本控制;因为:Git无锁定/解锁模式,故不能排他式修改
- 整体的读授权,不能将读授权精细到目录级别;解决方案:版本库按照目录拆分
小结:
- 版本控制工具的发展历史经过:原始人工维护状态,本地RCS,集中式如VCS、SVN和分布式如Git。
- 版本控制工具提供了协作开发的能力,借助它们我们可以回到任何时间的代码状态。
- 集中式版本控制工具,几乎所有的动作都需要服务器参与,并且数据安全性与服务器关系很大。
- Git 是分布式版本控制工具,除了与服务器之前进行按需同步之外,所有的提交操作都不需要服务器。
Git相关命令:
-
- 工程准备
- 工程准备 git init/git clone
- git lfs clone:对二进制文件进行区别管理
- 工程准备
-
- 查看工作区
- 查看工作区的修改内容—— git diff
- 查看工作区文件状态—— git status(学会看每一行的交互提示信息)
- 查看工作区
-
- 文件修改后提交推送
- 新增/删除/移动文件到暂存区—— git add/ git rm/ git mv
- 文件修改后提交推送
Git add . 一次性添加所有,(注意这个点)
-
- 提交更改的文件—— git commit
- git commit file_name –m “commit message” 提交文件同时附上提交信息
- 如果要一次性提交所有在暂存区改动的文件到版本库,可以执行:
- git commit –am “commit message”
- git commit – -amend (修改最近一次提交的信息,修改后会新生成一个节点)
- 提交更改的文件—— git commit
-
- 推送远端仓库—— git push
- git push origin branch_name(origin是远端服务器的名字,可以用git remote查看,一般默认为origin,除非特殊修改)
- windows下面命令行的大小写不敏感
- 推送远端仓库—— git push
-
- 查看日志
- 查看当前分支上的提交日志—— git log
- Git log – -name-status 展示详细信息
- Git log -1 查看头一行日志
- Git reflog 查看最近的操作
- 参数很多,可以自行了解
- 查看日志
-
- 分支管理
- 列出本地分支—— git branch
- *和绿色表示当前工作区所在分支
- git branch –r,查看远端服务器上的分支,返回的分支名带origin前缀,表示在远端;
- git branch –a,查看远端服务器和本地工程所有的分支
- 列出本地分支—— git branch
- 分支管理
-
-
- 新建分支—— git branch / git checkout –b
- 相同点:
- git branch和git checkout –b都可以用于新建分支(默认基于当前分支节点创建)。
- 区别点:
- git branch新建分支后并不会切换到新分支;
- git checkout –b新建分支后会自动切换到新分支。
- 常用的新建分支命令格式:git branch new_branch_name / git checkout –b branch_name
- 相同点:
- 新建分支—— git branch / git checkout –b
-
-
-
- 删除分支—— git branch –d
- git branch –d branch_name
- git branch –D branch_name(强制删除)
- 删除服务器上的远程分支可以使用git branch -d -r branch_name,其中branch_name为本地分支名。
- 删除后,还要推送到服务器上才行,即git push origin : branch_name
- 删除分支—— git branch –d
-
-
-
- 切换分支—— git checkout
- git checkout branch_name
- 使用git checkout –f进行强制切换
- 切换分支—— git checkout
-
-
-
- 更新分支—— git pull / git fetch
- git pull origin remote_branch:local_branch
- 如果远程指定的分支与本地指定的分支相同,则可直接执行git pull origin remote_branch
- git fetch:与git pull不同,git fetch在获取到更新后,并不会进行合并
- 常用的获取远端分支更新命令格式:git fetch origin remote_branch:local_branch
- 如果远程指定的分支与本地指定的分支相同,则可直接执行git fetch origin remote_branch
- 更新分支—— git pull / git fetch
-
-
- 撤销操作
- 强制回退到历史节点—— git reset
- 常用的工作区回退命令格式:git reset commit_id
- (可能会回退很多信息,错失很多重要信息)
- 回退本地所有修改而未提交的—— git checkout .(注意这个点)
- 谨慎操作
- 回退某个文件:git checkout –filename
- 回退(检出)到某个提交版本:git checkout commit_id
- 强制回退到历史节点—— git reset
- 撤销操作
-
- 分支合并
- 合并目标分支内容到当前分支—— git merge/git rebase
- git会将指定的分支与当前分支进行比较,找出二者最近的一个共同节点base,之后将指定分支在base之后分离的节点合并到当前分支上。分支合并,实际上是分支间差异提交节点的合并。
- git merge branch_name
- 合并目标分支内容到当前分支—— git merge/git rebase
- 分支合并