# gitstudy **Repository Path**: dushu/gitstudy ## Basic Information - **Project Name**: gitstudy - **Description**: No description available - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2018-02-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Git 学习资料整理 视频课程地址: ## 1 Git介绍 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git的读音为/gɪt/。 Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。 Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是已经发现在很多其他自由软件项目中也使用了 Git。 ### 1.1 Git的功能特性: 从一般开发者的角度来看,git有以下功能: - 从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。 - 在自己的机器上根据不同的开发目的,创建分支,修改代码。 - 在单机上自己创建的分支上提交代码。 - 在单机上合并分支。 - 把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。 - 生成补丁(patch),把补丁发送给主开发者。 - 看主开发者的反馈,如果主开发者发现两个一般开发者之间有冲突(他们之间可以合作解决的冲突),就会要求他们先解决冲突,然后再由其中一个人提交。如果主开发者可以自己解决,或者没有冲突,就通过。 - 一般开发者之间解决冲突的方法,开发者之间可以使用pull 命令解决冲突,解决完冲突之后再向主开发者提交补丁。 ### 1.2 从主开发者的角度(假设主开发者不用开发代码)看,git有以下功能: - 查看邮件或者通过其它方式查看一般开发者的提交状态。 - 打上补丁,解决冲突(可以自己解决,也可以要求开发者之间解决以后再重新提交,如果是开源项目,还要决定哪些补丁有用,哪些不用)。 - 向公共服务器提交结果,然后通知所有开发人员。 ## 2 Git 本地版本库 - `git init` 初始化仓库 - `git add .` 提交到**暂存库** - `git add -p` 按条提交到**暂存库** - `git commit -m "版本信息"` 提交到**本地仓库** - `git commit --amend` 撤销提交 - `git status` 查看**工作区**和**暂存区**状态 - `git diff` 查看**工作区**和**版本库**的区别 - `git diff --cached` 查看**暂存区**与**版本库**的区别 ## 3 Git 版本控制 ### `git log` - `git log` 显示本地版本库所有版本 - `git log -2` 显示最新的2次版本 - `git log -p -2` 显示最新的2次差异 - `git log --stat` 缩略行形式显示版本差异 - `git log --online` 以独立行显示日志 - `gitk` GUI界面显示git log ### `git reset` - `git reset 版本号` 加载指定版本到**工作区**,但不修改**工作区**内容。 需要通过 `git checkout -- <文件名或目录>` 回复文件或目录 - `git reset --hard 版本号` 加载指定版本到**工作区**,并覆盖现有**工作区**内容 - `git reset --soft 版本号` 加载指定版本到**暂存区** - `git reset head^` 返回上一个版本 ^可以是多个 ### 删除、移动、改名 - `git rm <文件名或目录> ` 删除指定文件,并提交到**暂存区** - `git rm --cached readme.txt` 删除指定文件跟踪 - `git mv <文件或目录原位置> <文件或目录新位置> ` - `git mv <文件旧名称> <文件新名称> ` ## 4 远程版本库 ### `git remote` - `git remote add <别名> ` 添加新的远程服务器地址 - `git remote <别名>` 删除远程服务器地址 - `git remote show` 查看所有的服务器地址 - `git remote rename <旧别名> <新别名>` 修改远程服务器别名 ### `git push` - `git push <版本分支名称>` 上传远端版本库 - `git push -u origin master` origin指定为默认的主机,下次直接使用 git push即可 - `git push --all` 推送所有本地分支到服务器 - `git push --force ` git push本地库版本低于远程版本库,则提示pull更新, --force则不提示更新 - `git push --tags` 推送tag标签到远程服务器 ## 5 .gitignore 定义Git项目过滤(不提交)规则 - /node_modules/ 不提交整个temp文件夹 - *.zip 不提交所有.zip文件 - /package-lock.json 不提交某个具体文件 - !/node_modules/jquery/ 提交某个不提交中的一部分(文件或目录) ==注意== `node_modules/` 忽略node_modules下全部内容,不管在根目录还是子目录 `/node_modules/` 只忽略根目录 ## 6 分支管理 - `git branch <新的分支名称>` 建立新分支 - `git checkout <分支>` 把**工作区**指向该分支 - `git checkout -b <新的分支名称>` 建立新分支,并跳转到该分支,相当于以上2条命令的效果 - `git merge <分支名称>` 合并该分支到工作区(会根据commit修改顺序排列) - `git rebase <分支名称>` 合并该分支到工作区(你的commit会在前面) - `git branch` 查看所有的分支 - `git branch -D <分支名称>` 删除分支 ## 7 远程版本库同步 - `git clone [新建项目文件夹的名字]` 远程版本库克隆到本地 - `git pull` 远程版本同步到本地**工作区**(覆盖) - `git fetch` 复制远程版本库所有信息到本地版本库,但不更新工作区 - `git pull <远程主机> <远程分支>:<本地分支>` ## 8 保存工作区镜像 - `git stash [save "说明"]` 保存工作区镜像 - `git stash list` 查看所有工作区镜像 - `git stash pop/apply stash@{n} ` - `git stash drop stash@{n}` 丢弃指定镜像 - `git stash clear` - `git show stash@{n}` 查看某条工作区镜像的内容 - `git stash branch <新分支名称> [stash@{n}]` 从镜像建立分支 ## 9 标签 - `git tag` 列出所有的标签 - `git tag -a <标签名称> -m <标签注释>` 打标签 - `git show <标签名称>` 显示标签 - `git push origin <标签名称>` 推送标签到远端仓库 - `git push origin --tags` 推送所有标签到远端仓库 ## 10 git bisect 二分法查找bug - `git bisect start` - `git bisect good` - `git bisect bad` - `git bisect reset` 退出bisect ## 11 issue - git commit -m "测试issue" title,#1 ## 小技巧 - `git config core.autocrlf false` LF与CRLF解决方法