代码管理参考
教程参考
软件参考
日志
- 2020年08月06日14:05:08 初始版本
- 2021年06月21日00:23:07 增加git SSH通信方式相关配置
1、常用命令
Git:分布式版本管理控制系统
1.0 初始配置
Step1:下载Git(推荐安装TortoiseGit、Sublime Merge);
Step2:注册github;
Step3:将Git和github连接起来
(1)本地git配置邮箱和名称:打开【git bash】,输入:
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
(2)本地生成秘钥:右键,点击【git bash】,输入命令ssh-keygen
,一路回车即可。生成两个文件:
C:Userszyjhandsome.sshid_rsa
C:Userszyjhandsome.sshid_rsa.pub
(3)github配置SSH(与本地电脑进行连接):github.com -> Setting -> SSH and GPG keys
,不妨命名为ssh_20210621
,复制id_rsa.pub
文件中内容即可。
(4)SSH通信方式配置
- 打开:
C:Program FilesTortoiseGitinputtygen.exe
,Type of key to generate
选择RSA
,点击【load】,选择id_rsa
文件,点击【Save private key】,不妨命名为zyjhandsome_private_key.ppk
- 打开:
C:Program FilesTortoiseGitinpageant.exe
,点击【Add Key】,选择zyjhandsome_private_key.ppk
文件,点击【Close】
Step4:确保git和github已经连接,在需要创建项目的文件夹中,右键,点击【git bash】,输入命令:git init
,会生成一个.git
文件夹(隐藏文件夹);
Step5:连接本地和github仓库,输入命令:git remote add orgin xxx
(Exapmle: git@github.com:zyjhandsome/test.git);
Step6:从远程仓库下载文件到本地,输入命令:
git pull origin master
(从origin远程仓库 master分支下载文件);
git pull upstream master
(从upstream远程仓库 master分支下载文件);
Step7:将本地文件推送到github,修改文件之后
输入命令(文件添加到暂存区):git add index.html
(index.html为修改或新建的文件,可以为多个)
输入命令(文件提交到本地仓库):git commit -m 'This is a example to commit files.'
输入命令(文件推送到远程仓库):git push origin master
// 1、Git安装完成之后,进行全局配置用户名和邮箱
git config --global user.name "name"
git config --global user.email "xxx@email.com"
// 2、创建SSH Key,并在github中进行添加秘钥
ssh-keygen -t rsa -C "youremail@example.com"
ssh -T git@github.com // 判断本地和github连接是否为通的状态
// 3.1 首次提交,提交代码到远程仓库
echo "# test" >> README.md // 可选,新建一个README.md文件,并写入 test
git init // 初始化版本库
git add README.md // git add添加文件到暂存区
git commit -m "first commit" // 提交到本地仓库中,并添加备注
// 本地仓库和远程仓库关联起来
git remote add origin git@github.com:zyjhandsome/test.git
// 将文件推送到远程仓库
git push -u origin master
// 3.2 提交到一个已有的仓库中
git remote add origin git@github.com:zyjhandsome/test.git
git push -u origin master
// 4、GitHub克隆到本地
git clone git@github.com:zyjhandsome/test.git
// 5、标签管理
git tag // 查看所有标签
git tag name // 创建标签
git tag -a name -m "comment" // 指定提交信息
git tag -d name // 删除标签
git push origin name // 标签发布,将标签推送到远程仓库
// 6.1 分支管理,比如开发一个项目需要两周,在一周之后,还是一个不完整的代码,为了防止替换了已经完整的代码,引入分支管理
git branch feature_name // 创建一个分支
git branch // 查看所有的分支(*表示当前所在的分支)
git checkout feature_name // 切换到feature_name分支
// 6.2 提交代码到分支中(首先切换到本地分支)
git add <filename> // 添加修改后的代码到暂存区
git commit -m "desc_xxx" // 提交到本地仓库中,并添加备注
git status // 查看当前状态
// 6.3 Merge代码到master分支
git checkout master // 切换到master分支
git merge feature_name // 将feature_name分支上的代码merge到master分支上
// 6.4 删除本地分支代码
git branch -d feature_name
1.1 汇总
1、工作流: 工作区 -> 暂存区 -> 版本库
2、初始化(本地仓库):
git init // 工作区,初始化本地仓库,将当前目录配置成Git可以管理的仓库,该目录下会多出来一个`.git`文件夹
git add <filename> // 添加<filename>文件到暂存区,告知Git,把文件添加到仓库
git add . // 表示添加新文件和编辑过的文.
git commit -m "xxx" // 提交到本地仓库,`-m`后面输入本次提交的说明
3、关联/推送远程仓库:
git remote add origion <url> // 本地已有仓库关联到远程仓库(如: git@github.com:zyjhandsome/test.git))
git pull <remote> <branch>
/* pull 等价于 fetch+merge */
/* Example1: git pull git@github.com:zyjhandsome/test.git master --allow-unrelated-histories */
/* Example2 (fatal: refusing to merge unrelated histories 报错时,进行强制合并): git pull git@github.com:zyjhandsome/test.git master --allow-unrelated-histories */
git push -u origin master
git remote -v // 查看本地仓库与远程仓库的关联详情
git remote remove origion // 解除与远程仓库的关联
4、克隆远程仓库到本地(先选择到被选择的目录中): git clone <url> // git@github.com:zyjhandsome/test.git
5、拉取远程仓库到本地(先选择到被选择的目录中): git pull
6、分支管理: git branch -> git checkout -> git merge
7、标签管理: git tag -> git push
8、查看状态: git status
9、比较差异性: git diff HEAD --xxx // 比较上一个版本跟当前xxx文件的差异性(暂存区的差异性)
1.2 代码更新
git pull upstream master // 从顶级库更新最新代码到本地
// 如果本地已经修改代码,需要先暂存本地代码,更新之后,再Pop出来
git stash
git pull upstream master
git stash pop
// 如果上述操作出现了冲突,则详见下方【解决冲突】栏
1.3 代码提交
git status // 获取当前的状态
git add <filename> // 添加<filename>文件到暂存区,告知Git,把文件添加到仓库
git add . // 表示添加新文件和编辑过的文.
git commit -m "xxx" // 提交到本地仓库,`-m`后面输入本次提交的说明
git push origin master // Push代码到origin仓库的master分支
git push -u origin master // Push代码到origin仓库的master分支
// 当远程分支落后本地,强制推送到远端
git push -f origin master // Push代码到origin仓库的master分支
1.4 版本回退
情形1(已经commit到本地仓库):
// 初始化和第一次提交到本地仓库
git init
git add xxx
git commint -m 'first commint'
// 第二次提交
git add xxx
git commit -m 'second commit'
回退:
git log // 显示从最近到最远的提交日志信息
git log --pretty=oneline // 显示简要的提交日志信息
git reflog // 记录每一次命令
git reset --hard HEAD^ // HEAD^: 回退到上个版本, HEAD^^: 回退到上上个版本, HEAD~100: 回退到上100个版本
情形2(只是本地工作区进行了修改),回退方式:
// 这里有两种情况
// 情形1: xxx文件自然修改,还未到暂存区,执行该命令之后,撤销修改就回到和版本库一模一样的状态
// 情形2: xxx文件已经添加到暂存区后,又做了修改,现在撤回到添加到暂存区后的状态
git checkout -- xxx // xxx为需要回退的文件,把 xxx 文件,在工作区的修改全部撤销
// 上面命令逐渐会替换为以下两条语句
git restore xxx
git restore [<options>] [--source=<tree>] [--staged] [--worktree] [--] <pathspec>…
git restore [<options>] [--source=<tree>] [--staged] [--worktree] --pathspec-from-file=<file> [--pathspec-file-nul]
git restore (-p|--patch) [<options>] [--source=<tree>] [--staged] [--worktree] [--] [<pathspec>…]
1.5 分支管理
本地仓库的分支管理:
// 创建和切换分支
git checkout -b dev // checkout 命令加上`-b`表示创建和切换
// 上面命令逐渐会替换为以下两条语句
git switch <分支名> 和 git switch -c <分支名>
// 相当于两条命令: `git branch dev` 和 `git checkout dev`
git branch // 查看当前分支, 切换到dev分支,切换到主分支: `git checkout master`
git branch -a // 查看所有分支
git checkout <branch name> // 切换分支
git switch <branch name> // 切换分支(推荐)
git -d <branch name> // 删除本地分支
// 切换到dev分支
git checkout dev
// 将需要提交的文件添加到dev分支的暂存区
git add <filename> // or: `git add .`
// 将需要提交的文件提交到dev分支的本地仓库
git commit -m <commit comment>
// 将dev分支内容合并到master分支
// 首先切换到master分支
git checkout master
// 将dev分支的内容合并到master分支
git merge dev
// 合并完成之后,就可以删除dev分支了
git branch -d dev
// 提交到远程仓库
git push -u origion master
// 举例
// 本地 -> origin (个人远程仓库) -> upstream (顶级仓库)
// upstream库有两个分支:master、dev-20210414
// 情形1:upstream (顶级仓库) 新建了一个分支:dev-20210414,需要同步到本地和origin仓库,新建相应的分支
// Step1:本地新建一个同名分支并和远程进行关联
git checkout --track dev-20210414 // dev-20210414为分支名称
// Step2:本地切换到dev-20210414分支
git switch dev-20210414
// Step3:推送和新建分支到个人远程仓库并
git push origin dev-20210414:dev-20210414 // 推送本地的dev-20210414分支到远程origin的dev-20210414分支(没有会自动创建)
// 情形2:修改文件A,提交到远程仓库的dev-20210414分支
git branch // 查看当前分支,如果不是dev-20210414分支,则用命令`git switch dev-20210414`切换到需求分支
git pull upstream dev-20210414 // 从顶级库拉取最新代码
// 修改文件A
git status // 查看当前状态(修改文件等)
git add . // 暂存修改的文件
git commit -m "Modify file of A" // 提交修改的文件
// ** 此时本地切换到master分支,可以看到A文件又会恢复原装,仅仅在dev-20210414分支上进行了修改
git push -u origin dev-20210414 // 推送到个人远程仓库
// 后面就是在dev-20210414分支上正常提交到顶级库的流程
// 情形3:需要将修改的文件同时推送到两个或多个不同的分支
// 如需要将修改的文件A同时推送到master分支和dev-20210414分支
// 可以先将相关更改的文件暂存起来,切换到需要提交的分支再Pop出来
git branch // 查看当前分支,假设当前分支是master分支
git pull upstream master // 从顶级库拉取最新代码
git stash save "暂存1" // "暂存1"为自定义命名的一个暂存名称
git stash list // 可以看到当前暂存的数据,默认 "暂存1" 会在最新的位置,即位置0
git stash apply 0 // Pop出需要提交的文件,或者使用命令 `git stash pop` 默认弹出最新的暂存文件
// 1. 提交代码到master分支
git status // 查看当前状态(修改文件等)
git add . // 暂存修改的文件
git commit -m "Modify file of A" // 提交修改的文件
git push -u origin master // 推送到个人远程仓库
// 后面就是在master分支上正常提交到顶级库的流程
// 2. 提交代码到dev-20210414分支
git branch // 查看当前分支
git pull upstream dev-20210414 // 从顶级库拉取最新代码
git switch dev-20210414 // 切换到dev-20210414分支
git stash list // 可以看到当前暂存的数据,默认 "暂存1" 会在最新的位置,即位置0
git stash apply 0 // Pop出需要提交的文件,或者使用命令 `git stash pop` 默认弹出最新的暂存文件
git status // 查看当前状态(修改文件等)
git add . // 暂存修改的文件
git commit -m "Modify file of A" // 提交修改的文件
git push -u origin dev-20210414 // 推送到个人远程仓库
// 后面就是在dev-20210414分支上正常提交到顶级库的流程
1.6 解决冲突
在VS Code中,会直接提示冲突的代码内容
当前更改
:当前代码库中的代码(比如:upstream)传入的更改
:stashed changes(本地/本次提交的修改)
// 创建和切换分支feature1
git switch -c feature1
// 修改Branch.txt文件
// 内容: Hello, I am here.
git add Branch.txt // 添加到feature1分支的暂存区
git commit Branch.txt // 提交到feature1分支的本地仓库
// 切换回主分支
git switch master
// 修改Branch.txt文件
// 内容: Hello, world.
git add Branch.txt // 添加到master分支的暂存区
git commit Branch.txt // 提交到master分支的本地仓库
git merge feature1
// 会产生如下冲突:
Auto-merging Beanch.txt
CONFLICT (content): Merge conflict in Beanch.txt
Automatic merge failed; fix conflicts and then commit the result.
git status // 查看冲突内容
// 打开Branch.txt文件,能看到冲突差异性
vim Branch.txt
// HEAD为主分支内容, feature1为feature1分支内容
<<<<<<< HEAD
Hello. I am here!
=======
Hello, world.
>>>>>>> feature1
// 修改成:
Hello, world. I am here!
git add Branch.txt
git commit -m 'conflict fixed'
git branch -d feature1 // 完成之后,选择性删除分支
// Git小乌龟工具,右键 -->> 解决冲突
1.7 标签管理
2、Git工作流
3、Sublime Merge介绍
3.1 远程仓库更新
-
复制远程仓库 SSH 地址
-
克隆项目到本地
git clone git@github.com:userName/`projectName`.git
-
用 Sublime Text 3 打开该项目
-
将文件添加到暂存区
Ctrl + Shift + P 调起命令面板,输入Git: Add All
,将文件提交至暂存区 -
提交注释(提交到本地版本库)
Ctrl + Shift + P 调起命令面板,输入Git: Commit
,将文件提交至版本库
这时会弹出 提交注释的文件,在最上方输入此次更新的内容和目的,关闭该文件即自动触发提交日志操作。 -
将文件上传
Ctrl + Shift + P 调起命令面板,输入Git: Push
,将文件提交至版本库
3.2 本地仓库上传
- 先在 https://github.com 上创建一个和本地仓库名字相同的线上仓库
用 Sublime Text 3 打开该项目 - 初始化仓库
Ctrl + Shift + P 调起命令面板,输入Git: Init
,回车,确认路径,回车 - 用 Sublime Text 3 打开该项目
- 将文件添加到暂存区
Ctrl + Shift + P 调起命令面板,输入Git: Add All
,将文件提交至暂存区 - 提交注释(提交到本地版本库)
Ctrl + Shift + P 调起命令面板,输入Git: Commit
,将文件提交至版本库
这时会弹出 提交日志的文件,在最上方输入此次更新的内容和目的,关闭该文件即自动触发提交日志操作。 - 将文件上传
Ctrl + Shift + P 调起命令面板,输入Git: Add Remote + Remote Name (e.g., "origin")
,将文件提交至版本库 - 将文件提交至远程版本库
Ctrl + Shift + P 调起命令面板,输入Git: Push
,回车,确认路径,回车
报了一个错,因为没有指明远程仓库的名字和url地址
配置远程仓库地址
由于Sublime Text 的 Git 命令不能带参数,在 Git Bash 中完成
git remote add origin git@github.com:userName/projectName.git
3.3 修改Pull和Push为不同地址以及SublimeMerge的使用
1)修改Pull和Push为不同地址
git remote set-url origin top_stream_remote_url // top_stream_remote_url即为顶级库的地址
git remote -v // 查看当前的远程分支情况
git remote set-url --push origin user_remote_url // user_remote_url即为自己配置的地址,个人远程仓库(即修改推送到自己的远程仓库,再从远程仓库Merge请求到顶级库)
git remote -v // 查看配置是否生效
相关目录:
// 推送 (Push):
本地 -> (右侧: Add/Stage/Stage Lines) 暂存区 -> (右侧: Commit) 本地仓库 -> (Push) 个人远程仓库 -> (Merge Request) 顶级仓库
备注:(Discard/Discard Lines) 撤销
// 拉取 (Pull):
(Merge Request) 顶级仓库 -> Fetch -> (找到最新的拉取分支) Rebase Master onto this commit
// 本地修改,但不是最新代码时:
先 (上方) Stash (git stash),再Pull(Fetch),然后再恢复修改的代码 (上方)
名词解释:
Revert hunk: 恢复Commit之后的代码到Unstage状态
Hunk history: 查看该文件历史提交记录
2)SublimeMerge的使用
Step1:Open Repository(打开本地仓库)
默认:
master:本地仓库
origin:配置的(Push)远程仓库