文章目录
1 Introduction of Git and GitHub
-
集中式版本控制系统 ==> 分布式版本控制系统
-
GitHub
是一个基于 Git 的免费代码托管网站 -
在
GitHub
上创建仓库:- 登录
GitHub
个人主页,点击右上角 New repository 创建新的仓库,根据提示完成仓库相关信息即可; - 在
GitHub
上创建仓库,会自动生成一个仓库地址,主机就是指代这个仓库,主机名相当于仓库地址; - 新仓库的默认主机名为 origin ,默认分支为 master;
- 登录
-
安装 Git 版本控制器:( windows and linux )
- 查看Git的版本号: git --version
-
克隆
Github
上的仓库到本地:- 标准的克隆仓库命令: git clone + [仓库地址 eg:https://github.com/…]
- 进入到本地仓库的主目录,会发现主目录中有一个
.git
的隐藏目录,里面包含了仓库的全部信息,一旦删除该目录文件,仓库就会变成普通目录; - 在进入到仓库中,命令行的前缀会发生一些变化,即出现红色的(master),表示当前所在的分支名为主分支;
- 克隆到本地的仓库会自动关联到远程仓库,在本地执行 git remote -v 命令就可以查看到本地仓库所关联的远程仓库的信息;Git要求对本地仓库关联的每个远程主机都必须指定一个主机名,用于本地仓库识别自己所关联的主机,一个本地仓库可以关联任意多个主机(远程仓库);
- 克隆远程仓库到本地时,还可以使用 -o 选项修改主机名,在仓库地址后加上一个字段可以作为本地仓库的主目录名: git clone -o origin_name + [仓库地址 eg:https://github.com/…] new_directory
2 Basic operations of Git
- Git 本地仓库有三大区域,工作区 git add . => 暂存区 git commit => 版本区;
- 本地仓库 git push => 远程仓库;
- 在本地仓库中,查看整个仓库的状态命令: git status
- 在本地仓库中,添加一个文件(工作区改变)并再次查看仓库状态,会发现命令行前缀发生改变,(master*),表明工作区或暂存区有变化,对文件进行增删改操作时都会出现发生改变;
- 将新增的文件添加到暂存区,以便提交,使用的命令: git add [file.name]
- 如果对多个文件或者目录进行了增删改,全部添加到暂存区的命令: git add .
- 注意修改工作区之后,使用 git add .命令可以将修改内容添加到暂存区,暂存区记录的只是修改;当需要撤销暂存区的修改时,可以执行命令: git rm --cached [file.name]
- 查看工作区被跟踪的文件( 只有在版本区中存在的文件才是被跟踪的文件 )的修改详情,使用命令: git diff 按
Q
退出; - 配置个人身份信息,添加
GitHub
邮箱与账户名字: git config --global user.email “15033596733@163.com” and git config --global user.name “wxh-1996” 配置完成后,系统会自动生成Git的配置文件,即主目录中隐藏的.gitconfig
文件,查看配置信息的命令:git config -l - 查看版本区的提交历史记录,使用的命令(倒序输出): git log,可选的选项 [分支名] 用于查看某分支的提交历史,不写分支名将查看当前所在的分支、 --oneline 一行显示提交历史、 -n 查看最近n个提交、–author [贡献值名字] 查看指定贡献者的提交记录、–graph 图示法显示提交历史;正序输出: git log --reverse
- 将暂存区的修改提交到版本区,生成新的迭代版本,使用的命令: git commit,该命令必须附加一个选项 -m 来提供该提交的备注 git commit -m ‘the information of submitting file’.
- 查看全部分支信息的命令: git branch -avv
- 版本回滚
- 撤销最近的一次提交,将修改还原到暂存区的命令: git reset --soft HEAD^,其中 --soft 表示软退回、–hard 表示硬退回、HEAD^ 表示撤销一次提交、HEAD^^ 表示撤销两次提交、HEAD~n 表示撤销n次提交;
- 查看仓库的状态,使用命令: git status
- 修改文件,执行命令 git add .将新的修改添加到暂存区,然后执行命令 git commit生成新的提交;
- 强制推送,使用命令: git push -f;必须添加
-f
(–force)选项的原因在于本地仓库的master分支与远程仓库的origin/master分支在提交版本上有冲突,即提交时间线分叉;
- 回滚到具体版本的操作
- 记录本地仓库所有分支的每一次版本变化的命令: git reflog,注意reflog记录只存在于本地仓库中,当删除本地仓库时,记录也会随之消失;
- 回滚到特定版本号使用的命令: git reset --hard [版本号]/HEAD@{num};
3 Git Branch Operation
- 添加SSH关联授权
- 在本地系统中创建SSH公私钥,并将公钥放到GitHub指定位置,用于生成GitHub账户对于当前系统中的Git授权;
- 在终端执行ssh-keygen命令按几次回车生成公私钥,其中公私钥存放在主目录下的隐藏目录.ssh中;将公钥id_rsa.pub所在文件的内容复制出来,将其添加到GitHub网页的SSH keys中,回到仓库主目录,使用Use SSH重新git clone链接仓库即可;
- SSH的好处,免密码推送(git push)、数据传输速度交快;
- 为Git命令设置别名
- 有些命令的重复度极高,比如git status and git branch -avv命令等,git可以对这些命令设置别名,以便简化对其使用,设置别名的命令:git config --global alias.[别名] [原命令],如果原命令中有选项的话,需要加单引号;
- Git分支管理
- 分布式版本控制器最强大功能即分支管理;
- git fetch 刷新本地分支信息(online)
- git pull == git fetch + git merge
- git fetch命令的作用是将远程仓库的分支信息拉取到本地仓库,仅更新本地的远程分支信息,即执行git branch -avv命令时所查看到的remotes开头行的分支信息;
- 实例:当在GitHub页面上对仓库中的文件进行修改提交后,使用git fetch命令,然后执行git branch -avv命令就可以查看到远程分支的更新信息;
- 为使本地master分支的提交版本最新,可以拉取远程分支到本地,所使用的命令:git pull or git rebase origin/master;
- 创建新的本地分支
- 多人协作时,每个人都拥有各自分支,在分支上进行修改之后,首先需要向master分支提(pull request),之后从master分支推送到线上;
- 克隆远程仓库到本地,进入仓库主目录,查看分支信息的命令:git branch -avv
- 创建新分支的命令: git branch [branch_name]
- 切换到新分支的命令: git checkout [branch_name]
- 创建新分支并切换的命令: git checkout -b [branch_name]
- 新建的本地分支信息的版本号与主分支master的版本号一致;
- 新建的分支不会跟踪任何远程分支,在新建的分支中开发新的测试功能,依次提交给暂存区、版本区,将会生成一个新的提交版本(版本号与master不一致);
- 将新分支中的提交推送至远程仓库
- 将本地分支推送到远程仓库分支的命令: git push [主机名] [本地分支名] :[远程分支名] ;冒号前后的分支名相同时,可以省略冒号后的内容,如果远程分支不存在,会自动创建;
- 本地分支跟踪远程分支
- 当新创建的本地分支可以跟踪远程同名分支,可以使用 git push 命令进行直接推送;
- 将本地分支与远程分支进行关联,使本地分支跟踪远程分支的命令: git branch -u [主机名/远程分支名] [本地分支名],-u选项是–set-upstream的缩写;
- 撤销本地分支与远程分支的关联命令: git branch --unset-upstream [分支名];
- 推送+跟踪命令: git push -u [主机名/远程分支名] [本地分支名];
- 删除远程分支
- 一次删除一个: git push [主机名] : [远程分支名];
- 一次删除多个: git push [主机名] : [远程分支名] : [远程分支名];
- 其他删除命令: git push [主机名] --delete [远程分支名];
- 本地分支的更名与删除
- 删除本地分支命令: git branch -D [分支名];
- 修改本地分支命苦: git branch -m [原分支名] [新分支名];
4 多人协作GitHub部分
-
创建仓库
添加.gitignore文件,在写代码时,总会出现一些不需要上传到仓库的垃圾文件、缓存文件、备份文件、环境文件等等,可以创建一个忽略文件将这些不需要被上传到远程仓库的文件忽略掉;
-
增加合作者
在GitHub仓库界面的Settings页面的Collaborators选项中添加成员;
-
添加issue
在组长的GitHub仓库界面可以添加一些项目任务或者待解决问题,写好任务标题后,可以在右侧指派一位或多位项目参与者来完成, GitHub 会给被指派者发邮件;
5 多人协作Git部分
-
克隆仓库到本地
-
完成任务并推送到自己的仓库
每个issue在创建之后都会生成一个编号,根据不同的任务,创建不同的目标文件,依次添加到暂存区、提交到版本区(在备注信息中,需要添加’fixed #1 balabal’消息)、最后push到远程仓库;
-
提PR&检查合并PR
- 提PR:在组员的仓库master分支给组长仓库的master分支提一个PR;
- 合并 PR 的方法有三种:
Create a merge commit
:这种方式会在组长仓库的 master 分支上生成一个新的提交,且保留 PR 中的所有提交信息。这是一种常规操作,用得最多。Squash and merge
:压缩合并,它会把 PR 中的全部提交压缩成一个。此方法的优点就是让提交列表特别整洁。Rebase and merge
:这种方法不会生成新的提交,例如 PR 中有 6 个提交,用此方法合并后,组长仓库也会新增 6 个提交。注意,这些提交的版本号与组员的提交不同,此外完全一样。
-
同步主仓库
- 提PR、合并PR只能在GitHub页面上进行操作,同步主仓库需要使用Git操作;
- 首先增加一个关联主机,执行命令 git remote add [主机名up] [主仓库地址];主机名可以随意定义,只要不是 origin 就可以,因为自己的仓库地址对应的主机名是 origin,主仓库的主机名通常定义为 up 或 upstream,这个主机名其实就是一个变量,它的值就是仓库地址,主仓库的地址需要使用 https 开头;
- 同步主仓库:
- 执行命令 git pull --rebase up master;
- 执行命令 git fetch up + git rebase up/master;