前情提要: 本文章仅用于学习整理,对于一些具体问题的解决方法不会太详细,只会贴出关键命令行
名词解释
工作区: 本地编译器中的改动,调用add命令前的代码区域暂存区: 调用add命令后,调用commit命令前, 被 git 暂存代码的区域本地仓库: 调用commit命令后, 调用push命令前, 被 git 管理版本代码的区域远程仓库: 调用push后推送到的线上代码版本管理仓库
命令及功能概述
add: 将工作区代码添加至暂存区commit: 将暂存区代码提交至本地仓库push: 将本地仓库代码推送至远程仓库fetch: 拉取远程仓库代码至本地merge: 合并同分支或不同分支代码rebase: 变基,效果与 merge 类似, 区别在于rebase前后都是一个分支pull: 拉取远程分支至本地,并与本地分支合并,效果同fetch+rebase命令log: 查看代码提交记录reset: 回退代码至某一个版本,会修改原版本记录,且该版本之后的版本代码也会受到影响revert: 回退某一次版本提交,不会修改原版本记录,会在原版本记录的基础上添加新版本记录,且不会影响除除该版本之外的其他版本
常用命令
注:
$xxx: 自定义内容, 文章中对所代表的含义也会进行标注;
[$xxx]: 可选参数;
[$xxx1 | $xxx2]: 二选一必选参数
-
生成ssh-key:
ssh-keygen -
将本地仓库与远程仓库关联
-
$commit-message: 提交概述信息 -
$remote-repositery-address-url: 远程仓库
> git init > git add . > git commit . -m $commit-message > git remote add origin $remote-repositery-address-url > git push -u origin master -
-
拷贝远程仓库至本地
-
$remote-repositery-address-url: 远程仓库地址 -
$local-dirname: 存放代码的本地文件夹的名称,可选参数,默认为仓库名称
> git clone $remote-repositery-address-url [$local-dirname] -
-
提交代码的一般流程
-
$filename: 文件名 -
.: 通配符,代指所有文件, 与$filename二选一 -
$commit-message: 提交概述信息
拉取远程代码: > git pull 将工作区代码添加至暂存区: > git add [$filename | .] 将暂存区代码添加至本地仓库: > git commit . -m $commit-message 将本地仓库代码上传至远程仓库: > git push -
-
新建本地分支
-
$branch-name: 分支名
> git checkout -b $branch-name -
-
本地分支切换
-
$branch-name: 分支名
> git checkout $branch-name -
-
本地代码在 工作区 未添加至 暂存区 前回退代码至修改前的状态
-
$filename: 文件名
> git checkout $filename -
-
删除本地或远程分支
-
$local-branch-name: 本地分支名 -
$remote-branch-name: 远程分支名
删除本地分支: > git branch [ -d | -D(强制删除)] $local-branch-name 删除远程分支: > git push -d origin $remote-branch-name -
-
新建本地分支后提交代码
-
$remote-branch-name: 远程分支名
设置默认推送到的远程分支: > git push --set-upstream origin $remote-branch-name -
-
查看代码修改状态
> git status -
查看代码提交日志
> git log -
将
a分支合并到b分支中1. 切换到 b 分支下: > git checkout b 2. 执行 merge 命令将 a 分支合并至 b 分支中: > git merge a -
将
b分支还原为合并前的状态> git reset --hard origin/b -
将 工作区 内容与最近一次 commit 的版本库对比
-
$need-diff-filename: 需要对比的文件名
> git diff [$need-diff-filename] -
-
将 暂存区 内容与最近一次 commit 的版本库对比
-
$need-diff-filename: 需要对比的文件名
> git diff --cached [$need-diff-filename] -
-
将 工作区 内容与某一次 commit 的历史版本库对比
-
$need-diff-commitId: 需要对比的commitId, commitId可以通过log命令查看
> git diff $need-diff-commitId -
-
将 暂存区 内容与某一次 commit 的历史版本库对比
-
$need-diff-commitId: 需要对比的commitId, commitId可以通过log命令查看
> git diff --cached [$need-diff-commitId] -
-
比较两个分支的不同
-
$filename: 需要比较的文件名
两个分支中文件区别的概述: > git diff master dev --stat 比较两个分支中具体文件的区别: > git diff master dev -- $filename [$filename2] 比较两个分支的区别: > git diff master dev -
-
查看
dev分支中有的提交记录而test分支中没有的提交记录> git log dev ^test -
查看差异分支并区分差异所属分支
// 左箭头 '<' 表示 dev 分支, 右箭头 '>' 表示test分支 > git log --left-right dev...test
场景实践
-
已修改但未提交的代码需要切换分支
-
$stach-code: 暂存区编码
暂存: > git stash 暂存区列表: > git stash list 从暂存区中恢复: > git stash apply $stach-code -
-
将已通过
git add命令添加至暂存区的文件移出暂存区-
$filename: 需要移出暂存区的文件名 -
$dirname: 需要移出暂存区的文件夹
> git reset HEAD -- [$filename | $dirname] -
-
需要切换至
test分支,但本地存在test同名文件方法1: > git checkout -b test origin/test 方法2: > git checkout -t origin/test如果本地已存在
test分支,git checkout test命令默认切换分支 -
将已提交至本地仓库的文件或文件夹移除版本控制
-
$filename: 需要移出暂存区的文件名 -
$dirname: 需要移出暂存区的文件夹
移除文件: > git rm -f --cached $filename 移除文件夹: > git rm -r --cached $dirname -
-
撤销误提交的代码版本记录并重新提交
-
$commitId: 提交记录id
// 1. 撤销误提交记录 撤销最近一次的版本记录: > git reset HEAD^ 撤销某个 commitId 的版本记录: > git reset $commitId // 2. 重新提交(由于本地版本低于远程版本,提交时会禁止) 清除远程误提交记录(强制提交): > git push -f 在远程版本基础上提交(先更新解决代码冲突后再提交): > git pull && git push -
-
清理本地分支中远程分支已被删除的分支
-
$need-deleted-branch-name: 需要删除的本地分支名
查看本地分支与远程分支的对应关系(在分支名后出现 ": 丢失" 或 ": done" 的分支为远程分支已删除的分支): > git branch -vv 根据上面查出的分支信息清理本地分支: > git branch -d $need-deleted-branch-name [$need-deleted-branch-name2] -
-
一份本地代码对应多个远程仓库
- 执行
N次命令,推送N次代码-
$remote-name: 远程仓库别名 -
$remote-url: 远程仓库地址
// 添加本地代码对应的远程仓库 > git remote add $remote-name $remote-url > git remote add $remote-name2 $remote-url2 // 将代码推送至远程仓库 > git push // 推送至默认远程仓库 > git push $remote-name > git push $remote-name2 // 修改默认推送的远程仓库 > git push -u $remote-name // -u: --set-upstream 的简写 -
- 执行
1次命令,推送N次代码-
$remote-name: 远程仓库别名, 默认为origin -
$remote-url: 远程仓库地址
// 添加推送地址 > git remote set-url --add $remote-name $remote-url > git remote set-url --add $remote-name $remote-url2 // 将代码推送至远程仓库 > git push -
- 执行
-
保持本地代码与远程代码一致
1. 拉取远程代码但不合并: > git fetch 2. 本地代码与远程代码合并,差异部分与远程代码的 `master` 分支保持一致: > git reset --hard origin/master -
恢复本地已删除分支
-
$new-branch-name: 新分支名称 -
commitId: 提交记录id
1. 找到需要恢复到的 commitId: > git reflog show 2. 恢复分支: > git checkout -b $new-branch-name $commitId -
-
恢复已删除的代码
1. 找到需要恢复到的 commitId: > git reflog show 2. 恢复代码: > git reset --hard $commitId