Git 简介
常用命令
Git:分布式版本管理控制系统。
初始配置
-
下载 Git(推荐安装 TortoiseGit 和 Sublime Merge)。
-
注册 Github。
-
连接 Git 和 Github:
-
打开 Git Bash 并输入以下命令,为本地 Git 配置邮箱和名称:
git config --global user.email "you@example.com" git config --global user.name "Your Name"
-
生成本地 SSH 密钥:右键点击并选择 "Git Bash",然后输入命令
ssh-keygen
并按回车键即可。这将生成两个文件:id_rsa
和id_rsa.pub
。 -
配置 Github 使用 SSH:在
github.com -> Settings -> SSH and GPG keys
中,复制id_rsa.pub
文件的内容,并将其命名为ssh_20210621
。 -
配置 SSH 通信方式:
- 打开
D:\Program Files\TortoiseGit\bin\puttygen.exe
,选择RSA
并点击 "load",选择id_rsa
文件并点击 "Save private key",将其命名为zyjhandsome_private_key.ppk
。 - 打开
D:\Program Files\TortoiseGit\bin\pageant.exe
,点击 "Add Key",选择zyjhandsome_private_key.ppk
文件并点击 "Close"。
- 打开
-
创建和连接仓库
- 确保 Git 和 Github 已连接。在要创建项目的文件夹中,右键点击并选择 "Git Bash",输入命令
git init
,这将生成一个.git
文件夹(隐藏文件夹)。 - 连接本地和 Github 仓库,输入命令:
git remote add orgin xxx
(例如:git@github.com:zyjhandsome/test.git
)。
下载(Master和Branch代码)和上传文件
-
从远程仓库下载文件到本地。
-
从 origin 远程仓库 master 分支下载文件。
git pull origin master
-
从 upstream 远程仓库 master 分支下载文件。
git pull upstream master
-
下载分支代码。
git clone -b <分支名称> <git地址> # 举例,从XX远程仓库OpenHarmony-3.2-Release分支下载文件 git clone -b OpenHarmony-3.2-Release https://gitee.com/openharmony/docs.git
-
下载特定Tag分支代码。
git clone --branch <tags标签> <git地址>
-
-
将本地文件上传到 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、工作流: 工作区 -> 暂存区 -> 版本库
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文件的差异性(暂存区的差异性)
代码更新
git pull upstream master // 从顶级库更新最新代码到本地
// 如果本地已经修改代码,需要先暂存本地代码,更新之后,再Pop出来
git stash
git pull upstream master
git stash pop
// 如果上述操作出现了冲突,则详见下方【解决冲突】栏
代码提交
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(已经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>…]
分支管理
本地仓库的分支管理:
// 创建和切换分支
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分支上正常提交到顶级库的流程
解决冲突
在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小乌龟工具,右键 -->> 解决冲突
标签管理
Git工作流
Sublime Merge介绍
远程仓库更新
-
复制远程仓库 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
,将文件提交至版本库
本地仓库上传
- 先在 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
修改Pull和Push为不同地址以及SublimeMerge的使用
修改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: 查看该文件历史提交记录
SublimeMerge的使用
Step1:Open Repository(打开本地仓库)
默认:
master:本地仓库
origin:配置的(Push)远程仓库
参考
代码管理参考
教程参考
- 参考:独特工具箱 - Git命令速查表 *
- 参考:Atlassian Git教程
- 参考:GitHub简明教程、GitHub官方教程
- 参考:廖雪峰的官方网站-Git教程
软件参考
日志
- 2020年08月06日14:05:08 初始版本
- 2021年06月21日00:23:07 增加git SSH通信方式相关配置
- 2023年04月14日01:54:48 优化章节内容,并增加下载分支代码的方式
- 2023年06月07日14:45:39 优化部分描述内容
posted on 2020-08-06 14:05 zyjhandsome 阅读(271) 评论(0) 编辑 收藏 举报