原理部分
代码版本控制发展历程
- 手动复制,命令不同不版本,缺点:容易出错。
- CVS,集中式代码管理版本控制系统,缺点:单点故障。
- DVCS,分布式代码管理版本控制系统。
工作原理
- 在项目文件发生变更时,保存所有变更文件快照。
- 在本地管理项目,除了用push推送项目变更到远程时。
- 对目录中文件的任何变更,git都能发现,因为这些文件都有sha1完整性校验。
- 对于版本的任何变,git都是以增量方式进行保存,不会弄乱版本内容。
相关内容
- 工作区(Working Directory):某个版本所有文件的拷贝,用来编辑。
- 暂存区(Staging Area):git add后生成的索引文件,保存已修改的文件索引。
- 新建/修改文件 (工作区) -> git add (暂存区) -> git commit (工作区)
- 文件状态只有三种:staged (已暂存),modified (已修改),commited (已提交)
配置部分
安装 git
- windows下直接下载安装版本并下一步。
- linux下
sudo yum install git
配置 git
- 配置提交用户账号信息:
$ git config [--global] user.name "John Doe"
$ git config [--global] user.email [email protected]
- 查看已配置信息:
git config --list
查看所有配置
git config user.name
查看单个配置 - 相关参数:
--global 为全局设置,保存在:/etc/gitconfig
不加 --global 时,保存在项目目录:.git/config
使用部分
开始项目
- 在新建项目,或已有的代码中使用 git
git init
//在一个空项目目录中,初始化仓库(生成当前目录文件快照,方便后续进行管理) - 使用网上已有的或开源项目生成项目
git clone [项目git地址] [为空时克隆到当前目录,不为空时克隆到该名称目录中]
管理工作区
git status //查看工作区中,相对上次 commit,修改了的文件列表。
git rm [文件名] -f //取消某个文件的版本控制,并删除文件,如果已暂存,可以用 -f 强制删除。
git rm --cached [文件名正则] //取消某个文件的版本控制,但不删除本地文件,相当于 ignore 文件。
git mv [原文件名] [新文件名] //修改本地文件名,并生效在版本控制中。
git diff [--staged] [文件名] //查看工作区或暂存区中,相较上次 commit,各个文件做了哪些修改。
git checkout -- [文件] -b //谨慎使用。取消工作区对某文件的修改,使它恢复到上次版本提交时的状态,-b 切换并检出切换分支。
管理暂存区
git add [ . 或 文件名] //提交所有变更文件(用“.”),提交指定文件用文件名,到暂存区(staged)。
git reset HEAD [文件名] //可以把 git add 到暂存区的修改取出来。
管理提交 (一个提交包含了本次修改文件列表,修改内容,提交信息)
git commit -m "新的版本说明" -a //提交暂存区所有变更为新版本,-a 为自动 git add 操作。
git log [-p] [-2]//查看所有历史提交版本,-p 显示版本的diff差异,-2 为只显示最近2个版本。
git log --pretty=oneline //只显示单行的历史版本信息,版本+备注。
git commit amend //覆盖上次提交,可做为提交补充。[amend 修正]
管理分支
分支只是一个只指向提交的一个指针,不同分支指向了不同的提交版本,HEAD标识当前分支。
分支可以用来保存多个正在编辑的工作区状态,以便适应各种紧急、分状态情况。
git branch [-v] //查看所有分支,带*表示当前的分支,-v为详情,--no-merged为未合并的分支。
git branch [branch-name] //新建分支,不会切换。
git branch -u [remote-branch-name] //跟踪分支 1
git branch --set-upstream-to [remote:remote-branch] //跟踪分支 2
git checkout --track [branch-name] //检出并切换分支,--track 跟踪分支 3
git checkout -b [branch-name] [remote [:remote-bracn-name]] //拉取并跟踪分支 4
git branch -vv //查看本地所有分支跟踪情况
git merge [branch-name] //合并某分支到当前分支,即同步变更,会从最近的共同父版本开始。如果两个分支中间有跨度,会自动生成新的分支,除非有冲突,即各自做了不同修改,需要手动处理,可以使用 git mergetool 工具来帮助处理冲突。
git mergetool // 根据提示选择一个工具来解决冲突
git branch -d [branch-name] //删除本地分支。
git push [local-branch] --delete [remote-branch] //删除远程分支,删除指针,数据延迟删除。
git rebase [branch] //变基,将当前分支变更做为某分支的补丁,需要回到被补丁分支上 merge。
git rebase --onto [branch1] [branch2] [branch3] //将3基于2的变更,变基到 1 上
git rebase [branch1] [branch2] //将分支 2 的修改变基到分支 1 上,变基有风险。
//变基是指删除一些提交,然后整合到一起,rebase需谨慎,如果rebase造成混乱,可使用rebase应对。
远程同步
git remote [-v] //查看所有远程仓库,-v是详细信息。
git remote add [remote-name] [remote-url] //新增远程仓库地址。
git remote show [orgin] //查看远程仓库指定分支
git ls-remote //远程分支和标签查看
git fetch [remote-name] //从指定远程仓库拉取差异代码。
git pull //从远程分支上拉取差异代码
git push [origin] [master [:remote-branch-name]] //推送项目变更到远程服务器。
git remote rename [name1] [name2] //变更远程仓库标识名。
git remote rm [remote-name] //删除指定远程仓库链接。
管理标签 (轻量标签:版本别名;附注标签:完整文件的版本)
git tag //查看已有标签
git tag -l 'tag-name' //查看指定标签
git tag [标签名] [sha1前七位] //新建轻量标签
git tag -a [标签名] -m ['标签备注'] [sha1前七位] //新建附注标签
git push origin [标签名] [--tags] //推送标签名,--tags 为自动推送所有标签
git checkout -b [branch] [tagname] //检出指定标签为新分支 branch
管理命令别名
git config --global xxx [ alias.xxx ] //给命令取别名
git config –global credential.helper cache //缓存密码
实际应用
使用长期分支
例如仅在 master 上保留稳定版本代码,在 dev 版本上保存开发过程中的分支,在release中保存发行版本,在feature中保存各种特性的版本,另外还有 beta测试版本。一般 origin 为远程父分支,master 为本地主分支。
使用短期特性分支
特性分支用来实现工作中的某个单一特性,在它不成熟的时候可以一直不合并,一直到功能完善以后,再选择将它合并到主分支。
标签:git,remote,版本,--,日常,branch,使用,分支 From: https://www.cnblogs.com/juriln/p/17182173.html