一、Git 和 GitHub
1、什么是 Git
Git 是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。所以在 Git 命令窗口也可以使用 Linux 命令。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(Git clone),在本地机器上拷贝一个完整的 Git 仓库。官网
2、代码托管中心
代码托管中心的任务:维护远程库。局域网环境下:GitLab 服务器。外网环境下:GitHub,码云。
二、版本控制的工作流程
1、本地仓库的工作流程
一个 Git 仓库分为三个部分:工作区、暂存区、本地库。关系如下:
2、远程仓库的工作流程
3、远程仓库的 fork 工作流程
三、Git 的常用操作
Git 的下载安装,以及如何打开命令窗口这里不做解释,以下的所有命令都是在 Git 命令窗口进行。
1、初始化仓库
首先创建 Git 仓库,执行该命令后会在文件夹中创建一个 .git
文件夹, .git
目录中存放的是本地库相关的子目录和文件,不要乱修改。
git init
2、设置签名
签名的作用是用于区分不同的开发者身份(这里设置的签名和登录远程库的账号,密码没有任何关系)。签名分为仓库级别和系统用户级别:仓库基本仅在当前本地库范围内有效,系统用户级别在登录当前操作系统的用户范围有效,仓库级别的优先级高。
① 仓库级别
仓库级别的签名保存在当前仓库的 ./git/config
文件中。
git config user.name Yi-Xing
git config user.email 123@qq.com
② 系统用户级别
系统用户级别的签名保存在 ~/.gitconfig
文件中,在 Git 命令窗口中使用 cat ~/.gitconfig
即可查看。
git config --global user.name Yi-Xing
git config --global user.email 123@qq.com
3、将文件加入暂存区
使用该命令可以将文件加入暂存区,将文件名换为 .
表示全部文件。
git add 文件名
4、查看暂存区状态
该命令用于查看没被 commits
的文件状态。
git status
5、将文件从暂存区删除
git rm --cached 文件名
6、将暂存区的文件推到本地库
将文件名换为 .
表示全部文件。
git commit -m "提交的信息" 文件名
7、查看历史版本
查看详细的历史版本信息,如果版本信息多屏显示:空格向下翻页,b 向上翻页,q 退出。
git log
下面两种命令可以查看缩减版的历史版本信息。
git log --pretty=oneline
git log --oneline
查看所有操作记录(包括已经被删除的 commit 记录和 reset 的操作)。
git reflog
8、控制版本
① 基于索引值操作[推荐]
索引值就是查看历史版本的第一列字符串。
git reset --hard 索引值
② ^
符号
使用 ^
符号只能后退版本,n 个 ^
表示后退 n 个版本。
git reset --hard HEAD^
③ ~
符号
使用 ~
符号只能后退,n 表示后退 n 个版本。
git reset --hard HEAD~n
④ reset 命令
- --soft 参数:仅仅在本地库移动 HEAD 指针。
- --mixed 参数:在本地库移动 HEAD 指针并重置暂存区。
- --hard 参数:在本地库移动 HEAD 指针,重置暂存区和工作区。
9、比较文件差异
不带文件名比较多个文件。
① 工作区和暂存区的文件比较
git diff 文件名
② 工作区和本地库的文件比较
git diff 本地库中的历史版本 文件名
10、分支管理
分支介绍
- master:主干分支,上线代码;
- prerelease:预发分支,主要用来作为上线前回归和固定已通过测试的代码;
- dev:开发分支,根据具体业务可开独立分支(以dev-创建时间(年月日)-业务名称来命名),示例:dev-20170603-xxxx;
- test:测试分支,主要用来作为测试人员测试环境构建使用;
- hotfix(修补):线上紧急bug修复,完成之后,可以删除,示例:hotfix-20170603-xxxx;
- feature:与dev主线在同一个上线计划中的并行任务,合并测试之后可以删除。
注意事项
- 在dev_业务分支开发完成之后,请勿直接push代码到test分支,而是切换到test分支上merge业务代码,不要将test代码pull到自己的分支;
- 测试通过的业务代码分支和版本号必须与test分支merge上去的保持一致(与测试进行确认),如果有改动,请重新merge并测试,保证已经测试通过的代码才可以预发并上线;
- 测试通过的代码,根据上线计划需要,将已经测试通过并确认的dev_分支代码merge到prerelease分支,进行上线回归(预发测试);
- test分支的merge可以由开发人员来操作,prerelease分支的merge由固定人员操作。
① 查看本地所有分支
-r
查看远程所有分支, -a
查看本地和远程的所有分支。
git branch -v
② 创建分支
git branch 分支名
③ 切换分支
git checkout 分支名
④ 合并分支
将当前分支和其他分支合并。
git merge 分支名
⑤ 解决冲突
- 编辑冲突文件,删除特殊符号。
- 把文件修改到满意程度,保存退出。
- 执行
git add 文件名
。 - 执行
git commit -m "日志信息"
,后面不用带文件名。
⑥ 删除本地分支
-d -r
删除远程分支。
git branch -d 分支名
三、Git 对 GitHub 的常用操作
GitHub 账号的创建以及如何创建远程仓库这里不做解释。创建好远程仓库后进入如下界面:
1、将本地仓库推到远程仓库
① 设置别名
为了方便,我们可以为远程仓库设置别名。
git remote add 别名 远程仓库地址
② 查看别名
查看所有的别名。
git remote -v
③ 将本地仓库推到远程仓库
推送需要登录 GitHub 账号,用户必须有权限操作该远程库才能推送,否则会报 403 错误。
git push 别名或远程仓库地址 分支名
2、克隆远程仓库
克隆远程仓库会完成以下三步操作:把远程库下载到本地;创建 origin 远程地址别名;初始化本地库。
git clone 远程仓库地址
3、拉取远程仓库
git pull 别名或远程仓库地址 分支名
pull 操作由两个操作组成:fetch(拉取)+merge(合并)。fetch 后创建远程分支。
git fetch 别名或远程仓库地址 分支名
git merge 别名或远程仓库地址/分支名
4、解决冲突
如果在 push
的过程中提示以下信息,表示代码发生冲突,必须先 pull 解决冲突。
To https://github.com/Yi-Xing/Yi-Xing.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/Yi-Xing/Yi-Xing.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
pull 提示以下信息,表示 2.txt
文件有冲突, (master|MERGING)
表示进入解决冲突的状态,然后接着按照上面解决本地仓库冲突的方法进行即可。
From https://github.com/Yi-Xing/Yi-Xing
* branch master -> FETCH_HEAD
Auto-merging 2.txt
CONFLICT (content): Merge conflict in 2.txt
Automatic merge failed; fix conflicts and then commit the result.
HP@LAPTOP-MJQ1613H MINGW64 ~/Desktop/demo (master|MERGING)
四、使用 SSH 免登录
如果我们使用 https 的远程仓库地址,我们每次 push
都需要登录 GitHub(有时候不需要登录是因为 Win10 的凭据为我们登录了)。
1、删除 SSH
如果以前创建过 ssh
则先将 ssh
删除,首先进入当前用户的目录。
cd ~
删除 .ssh
目录
rm -rvf .ssh
2、生成 SSH
运行命令生成 .ssh
密钥目录,执行命令后会让设置密码,直接回车表示不设置密码。
ssh-keygen -t rsa -C GitHub绑定的邮箱
3、查看 id_rsa.pub 文件内容
先进入 .ssh
目录。
cd .ssh
查看 id_rsa.pub 内容,输入完命令后,控制台会打印你的密钥。
cat id_rsa.pub
4、将密钥加入到 GitHub 中
登录 GitHub 进入设置 SSH 的页面,点击 New SSH key
按钮。
任意输入标题,key 中粘贴将才查看的密钥,点击 Add SSH key
按钮即可,之后使用 SSH 的远程链接进行 push
可以免登录。
标题:Git & GitHub的常用操作
作者:Yi-Xing
地址:http://47.94.239.232:10014/articles/2020/01/16/1579140437550.html
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!