git使用教程2
git使用教程2
1.远程仓库指令
| 指令 | 简述 |
|---|---|
| git clone [git地址] | 从远程仓库克隆到本地(当前目录) |
| git remote -v | 查看所有远程仓库,不带参数-v只显示名称 |
| git remote show [remote] | 显示某个远程仓库的信息 |
| git remote add [name] [url] | 增加一个新的远程仓库,并命名 |
| git remote rename [old] [new] | 修改远程仓库名称 |
| git pull [remote] [branch] | 取回远程仓库的变化,并与本地版本合并 |
| git pull | 同上,针对当前分支 |
| git fetch [remote] | 获取远程仓库的所有变动到本地仓库,不会自动合并!需要手动合并 |
| git push | 推送当前分支到远程仓库 |
| git push [remote] [branch] | 推送本地当前分支到远程仓库的指定分支 |
| git push [remote] –force/-f | 强行推送当前分支到远程仓库,即使有冲突,⚠️很危险! |
| git push [remote] –all | 推送所有分支到远程仓库 |
| git push –u | 参数–u表示与远程分支建立关联,第一次执行的时候用,后面就不需要了 |
| git remote rm [remote-name] | 删除远程仓库 |
| git pull –rebase | 使用rebase的模式进行合并 |
2.推送push和拉取pull
- git pull:拉取远程仓库代码到本地,在实际的开发中,在提交前一定要先pull,避免冲突⚠️!
- git push:推送本地仓库到远程仓库,在实际的开发中,在提交前一定要先pull,避免冲突⚠️!
3.git pull和git fetch的异同
- 是从服务端获取更新,区别是 fetch 不自动合并,不影响当前工作区内容
- git pull = git fetch + git merge
- git fetch只获取更新,后手动执行
git merge合并
4.git使用之分支
分支是Git的核心优势,分支创建、切换、删除都非常快,非常的轻量。
注意:早建分支!多用分支!
分支指令
| 指令 | 描述 |
|---|---|
| git branch | 列出所有本地分支,加参数-v显示详细列表 |
| git branch -r | 列出所有远程分支 |
| git branch -a | 列出所有本地分支和远程分支,用不同颜色区分 |
| git branch [branch-name] | 新建一个分支,但依然停留在当前分支 |
| git branch -d dev | 删除dev分支,-D(大写)强制删除 |
| git checkout -b dev | 从当前分支创建并切换到dev分支 |
| git checkout -b feature1 dev | 从本地dev分支代码创建一个 feature1分支,并切换到新分支 |
| git branch [branch] [commit] | 新建一个分支,指向指定commit id |
| git branch –track [branch] [remote-branch] | 新建一个分支,与指定的远程分支建立关联 |
| git checkout -b hotfix remote hotfix | 从远端remote的hotfix分支创建本地hotfix分支 |
| git branch –set-upstream [branch] [remote-branch] | 在现有分支与指定的远程分支之间建立跟踪关联: git branch --set-upstream hotfix remote/hotfix |
| git checkout [branch-name] | 切换到指定分支,并更新工作区 |
| git checkout . | 撤销工作区的(未暂存)修改,把暂存区恢复到工作区。 |
| git checkout HEAD . | 撤销工作区、暂存区的修改,用HEAD指向的当前分支最新版本替换 |
| git merge [branch] | 合并指定分支到当前分支 |
| git merge –no-ff dev | 合并dev分支到当前分支,参数--no-ff禁用快速合并模式 |
| git push origin –delete [branch-name] | 删除远程分支 |
| git rebase master | 将当前分支变基合并到master分支 |
| ✅switch:新的分支切换指令 | 切换功能和checkout一样,switch只单纯的用于切换 |
| git switch master | 切换到已有的master分支 |
| git switch -c dev | 创建并切换到新的dev分支 |
分支的切换
git checkout dev 切换分支时,分为两步:
- HEAD指向 dev:修改 HEAD的“指针”引用,指向 dev 分支。
- 还原工作空间:把 dev 分支内容还原到工作空间。
合并和冲突
- 合并指令 git merge 分支名 ,表示将指定分支合并到当前分支
- 快速合并:master 无新提交,“git merge dev”合并分支dev到master,此时合并速度就非常快,直接移动
master的“指针”引用到dev即可不会产生新的提交。 - 普通合并:如果 master 有变更,存在分支交叉,则会把两边的变更合并成一个提交。
变基rebase
把两个分支的修改内容合并到一起的办法有两种:merge 和 rebase,作用都是一样的,区别是rebase的提交历史更简洁,干掉了分叉,merge的提交历史更完整。
1 | git rebase master |
- 在
dev上执行“git rebase master”变基,将dev分支上分叉的v7、v8生成补丁,然后在master分支上应用补丁,产生新的v7'、v8'新的提交。 - 然后回到
master分支,完成合并git merge dev,此时的合并就是快速合并了。 - 最终的提交记录就没有分叉了。
5.标签管理
| 指令 | 描述 |
|---|---|
| git tag | 查看标签列表 |
| git tag -l ‘a*’ | 查看名称是“a”开头的标签列表,带查询参数 |
| git show [tagname] | 查看标签信息 |
| git tag [tagname] | 创建一个标签,默认标签是打在最新提交的commit上的 |
| git tag [tagname] [commit id] | 新建一个tag在指定commit上 |
| git tag -a v5.1 -m’v5.1版本’ | 创建标签v5.1.1039,-a指定标签名,-m指定说明文字 |
| git tag -d [tagname] | 删除本地标签 |
| git checkout v5.1.1039 | 切换标签,同切换分支 |
| git push [remote] v5.1 | 推送标签,标签不会默认随代码推送推送到服务端 |
| git push [remote] –tags | 提交所有tag |
6.后悔指令
| 指令 | 描述 |
|---|---|
| git checkout . | 撤销工作区的(未暂存)修改,把暂存区恢复到工作区。不影响暂存区,如果没暂存,则撤销所有工作区修改 |
| git checkout [file] | 同上,file指定文件 |
| git checkout HEAD . | 撤销工作区、暂存区的修改,用HEAD指向的当前分支最新版本替换工作区、暂存区 |
| git checkout HEAD [file] | 同上,file指定文件 |
| git reset | 撤销暂存区状态,同git reset HEAD,不影响工作区 |
| git reset HEAD [file] | 同上,指定文件file,HEAD可省略 |
| git reset [commit] | 回退到指定版本,清空暂存区,不影响工作区。工作区需要手动git checkout签出 |
| git reset –soft [commit] | 移动分支master、HEAD到指定的版本,不影响暂存区、工作区,需手动git checkout签出更新 |
| git reset –hard HEAD | 撤销工作区、暂存区的修改,用当前最新版 |
| git reset –hard HEAD~ | 回退到上一个版本,并重置工作区、暂存区内容。 |
| git reset –hard [commit] | 回退到指定版本,并重置工作区、暂存区内容。 |
| git revert[commit] | 撤销一个提交,会用一个新的提交(原提交的逆向操作)来完成撤销操作,如果已push则重新push即可 |
Git是目前最主流的分布式版本控制系统,是免费开源的项目,核心的版本控制,用于进行多人的代码编辑,是团队开发的必备工具!
注:本文参考并感谢安木夕
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 flymh🌄!






