Git笔记
Git用处
- 分布式版本控制的软件
- 保留之前文件的所有的版本, 以便回滚和修改
Git官网和中文文档
- 官网: https://git-scm.com/
- 中文文档: https://git-scm.com/book/zh/v2
git基础命令
个人信息的配置
-
如果第一次使用
git
, 需要配置个人信息, 否则在执行git commit -m '<版本名>'
命令生成版本时, 会报错, 仅需一次, 之后便不再需要. -
配置代码
// 配置邮箱: git config --global user.email "you@example.com"
// 配置用户名: git config --global user.name "Your Name"
基本版本控制
-
Git版本查看
git --version
-
进入需要管理的文件夹
-
初始化
// 会出现一个.git隐藏文件 git init
-
检查管理文件
// 已管理的文件为绿色, 未管理的文件为红色 git status
-
管理文件夹
// 管理一个文件 git add <文件名> // 管理未管理的所有文件 git add .
-
生成版本
// 这个时候在执行git status命令时, 不会出现任何文件, 实现了完美状态(版本库状态) git commit -m '<版本名>'
-
修改文件
修改文件后, 在执行
git status
命令时, 被修改的文件会再次变为红色(未管理状态), 只有再次执行添加管理命令git add .
而后再次生成版本git commit -m '<版本名>'
, 才能再次实现完美状态. -
版本查看
// 以记录形式显示版本 git log // 以图形形式显示版本 git log --graph // 以图形形式显示版本且格式化,仅显示版本号和版本名 git log --graph --pretty=format:"%h %s"
回滚
-
回滚上一个版本
// 版本号可以执行git log获取 git log git reset --hard <版本号>
-
重新回滚回来
// 但是想要查找返回之前的所有版本号, 需要执行git reflog git reflog git reset --hard <版本号>
分支
-
查看所有分支
// 当前所在分支会呈现绿色 git branch
-
创建新的分支
// 创建分支和现在所在的分支有关,表示是从现在的分支拆分出去的 git branch <分支名>
-
切换所在分支
// 切换分支 git checkout <分支名> // 创建并切换分支 git checkout -b <分支名>
-
合并分支
// 想要切换到需要合并的分支 // 如需要让dev分支合并到master分支上 git checkout master // 合并分支 git merge dev
-
删除分支
// 当分支无用后, 便可以删除分支 git branch -d <分支名>
-
冲突问题
// 在合并分支时, 可能会报错(conflict冲突错误), 这个时候就需要去有冲突的文件内, 手动去修改冲突, 修改完毕后, 需要重新生成版本库 // 将解决冲突后的文件加入缓存区 git add . // 生成新的版本库 git commit -m '已经解决完毕冲突'
上传远程仓库
-
准备需要推送的远程仓库
// 给远程仓库起别名 git remote add origin <远程仓库地址>
-
推送分支
// 第一次一般都需要推送主分支(只有在版本库状态才能推送分支) // 切换成版本库状态 git add . git commit -m '<版本名>' git push origin master
-
克隆远程仓库上的代码
// 将会clone所有分支 git clone <远程仓库地址> // clone指定分支 git clone -b <分支名> <远程仓库地址>
-
拉取最新代码
// 这个命令相当于直接将远程仓库的代码拉到工作区, 可能产生分支 git pull origin <分支名> // 上述命令相当于以下两条命令 // 把远程仓库的分支放入版本库 git fetch origin <分支名> // 然后把拉去的分支合并到本地的分支,因为在远程仓库的分支会多一个前缀origin, 而正因为有合并, 所以在这里可能产生冲突(conflict) git merge origin/dev
rebase的使用
-
合并: 单个分支上多个版本
// 从最新的版本到此时合并的版本号中间所有的版本都合并成一个 git rebase -i <版本号> // 从最新版本开始往前第n个版本合并成一个 git rebase -i HEAD~n // 合并时会出现两个选项, 第一个将除最新记录外的之前记录前面都换成s,这样说明将之前的记录合并到最新记录, 而后执行:wq进行保存,而后第二个选项可以更改记录名,更改完成后,执行:wq保存即可 // 在选项输入时技巧: insert键可以切换输入模式,插入或是改写,按下Esc键后可以输入:wq保存修改 // 注意: 合并版本时尽量不要合并已push的版本,否则会导致版本很乱
-
变基: 使git记录更加清晰(让dev分支合并到master分支时更清晰)
// 先切换到dev分支 git checkout dev // 让dev分支合并到master git rebase master // 如果此时产生了冲突中断了合并则需要先解决冲突, 然后执行git add ., 最后继续合并 git add . git rebase --continue // 再次切换回master分支 git checkout master // 然后把dev分支合并到master git merge dev // 如果直接执行git merge dev后, 其记录会出现分支情况, 但如果按照上述方式合并,便不会出现分支情况,master上的记录仍然是一条完整的,不会有任何分支
-
远程仓库分支变基: 在远程拉取代码时也会产生分支, 这个时候也可以用rebase来实现记录的整合
// 先把远程仓库的分支拉取到本地版本库 git fetch origin dev // 然后合并到本地的dev分支 git rebase origin/dev // 如果此时产生了冲突中断了合并则需要先解决冲突, 然后执行git add ., 最后继续合并 git add . git rebase --continue // 这个时候就不能使用pull命令,因为pull的命令相当于直接执行了fetch以及merge命令,将会导致分支
给分支打上tag标记
// 本地打上tag
git tag -a v2 -m '<tag名>'
// 上传到远程仓库
git clone -b v2 <远程仓库地址>
git三大区域及远程仓库图解
给开源软件共享代码
- 先
fork
源代码, 把开源软件的源代码拷贝一份到自己的仓库 - 然后在自己的仓库修改别人的源代码
- 给原作者源代码提交已修改的代码, 就是创建一个
pull request
##git三大区以及
远程仓库免密登录
-
URL方式
// 原来的地址 https://github.com/.../....git // 修改为 https://用户名:密码github.com/.../....git // 当执行第一次设置远程仓库时 git remote add origin https://用户名:密码github.com/.../....git // 再次pull或是push时都不需要用户名和密码 git puh origin master
-
SSH实现
// 1.执行命令生成公钥和私钥(默认会在 ~/.ssh目录下 id_rsa.pub是公钥, id_rsa是私钥) ssh-keygen // 2.拷贝公钥的内容, 并设置到远程仓库中 // 3.在git本地配置ssh地址 git remote add origin git@github.com/... // 再次pull或是push时都不需要用户名和密码 git puh origin master
-
git自动管理凭证
这个是git自带的, 会自动存在本机本地, 所以不需要格外操作, 只需要输入一次用户名和密码, 以后就不用了
git忽略文件
-
git有些文件是无需进行版本管理的, 就可以使用
.gitignore
忽略 -
用法
- 新建文件
.gitignore
- 把需要忽略的文件名写入此文件即可
.gitignore
文件本身也需要被忽略, 也要写入文件中
- 新建文件
-
其中语法参考:
https://github.com/github/gitignore