一、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、分支管理

1.png

分支介绍

  • 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 分支名
⑤ 解决冲突
  1. 编辑冲突文件,删除特殊符号。
  2. 把文件修改到满意程度,保存退出。
  3. 执行git add 文件名
  4. 执行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
博客中若有不恰当的地方,请您一定要告诉我。前路崎岖,望我们可以互相帮助,并肩前行!