GIT的学习小结
本地仓库的 GIT 基本操作,远程仓库的 GIT 操作以及一些实例
可视化练习网站推荐:https://learngitbranching.js.org/
常用 GIT 命令
一. 本地仓库的 GIT 基本操作
git commit
-
创建 git 的提交记录
-
相当于将本地内容与 git 上内容(或者说当前版本与仓库中旧版本)对比,将二者差异打包作为一个提交记录
git branch ["分支名"]
-
创建 git 的分支
-
指向某个提交记录,基于这个提交记录以及它所有的父提交进行新的工作
-
按逻辑分解工作到不同分支中会使工作更加轻松,高效
-
git branch
(展示目前存在分支,和目前所在分支)
git checkout [-b] <分支名> [标识]
-
切换分支
-
git checkout -b <分支名>
(创建新分支并切换到新分支) -
git checkout -b <分支名> <标识>
(在标识位置创建新分支并切换到新分支)
git merge <分支名>
-
合并两个分支
-
将指定分支合并到当前所在分支,将两个分支及其所有历史节点记录都包含进去,产生一个特殊的提交记录
-
为使两个被合并的分支记录统一,通常会切换到另一分支,再进行一次合并
1
2
3
4
5
6
7
8
9// 例:新建 "test" 分支,在 "test","main" 分支分别创建一个记录,并将两个分支合并,最终指向 "main" 分支
git branch test // 默认有 "main" 分支, 创建一个 "test" 分支并切换到 "test" 分支
git commit // 在 "main" 分支下创建一个提交记录
git checkout test // 切换到 "test" 分支
git commit // 在 "test" 分支下创建一个提交记录
git merge main // 将 "main" 分支合并到 "test" 分支
git checkout main // 切换到 "main" 分支
git merge test // 将 "test" 分支合并到 "main" 分支
git rebase [目标分支] <分支名>
- 取出目标分支(默认当前分支)提交记录,移动至分支名分支,原地留下一个副本分支
1 | // 例:新建 "test" 分支,将其移至 "main" 分支,并更新 "main" 分支,最终指向 "main" 分支 |
二. 远程仓库的 GIT 操作
git clone
-
拷贝远程仓库的所有内容
-
git clone
后会产生一个远程分支< remote name > / < branch name >
(例(默认分支):origin/master
) -
远程分支反映了 “远程仓库相应分支,在你上次和它通信时的状态”
-
远程分支在检出时(即处于远程分支上时)自动进入分离 HEAD 状态
- 这样是为了使我们无法直接在 “远程分支” 上进行操作, 我们必须在别的地方完成工作, 再用远程推送工作成果
- Git 变成了分离 HEAD 状态,当添加新的提交时 “远程分支” 也不会更新
- “远程分支” 只有在远程仓库中相应的分支更新了以后才会更新
git fetch
-
从远程仓库获取数据
-
所有远程分支将会更新以反映最新的远程仓库,即单独从远程仓库下载本地仓库中缺失的提交记录
-
本地分支不会更新,即本地仓库状态不会改变 (更新
origin/master
分支,不更新master
分支) -
git fetch
通常通过互联网(使用http://
或git://
协议) 与远程仓库通信。
当远程分支中有新的提交时,可以像合并本地分支那样来合并远程分支
git cherry-pick <分支名>
- 拷贝 “分支名” 的单个节点到 “当前所在节点” 下
git rebase <分支名>
(前)
- 取出 “当前所在分支” 的一系列提交记录,移到 “分支名” 分支,原地留下一个副本分支
git merge <分支名>
(前)
- 将 “分支名” 分支合并到 “当前所在分支” , “当前所在分支下” 产生一个新的提交记录
git pull
-
先抓取更新,再合并到本地分支
-
git pull
会抓取当前分支对应的远程仓库的更新,并合并更新至到本地分支 -
类似
git fetch
(git fetch
会更新所有分支,git pull
只会更新当前分支) 加git merge <远程分支>
- 例:
git fetch
加git merge origin/master
,此后,当前分支为master
- 例:
git pull --rebase
-
先抓取更新,再移动当前分支至更新的远程分支
-
git pull --rebase
会抓取当前分支对应的远程仓库的更新,并取出当前分支提交记录,移动至更新的远程分支,原地留下一个副本分支 -
类似
git fetch
(git fetch
会更新所有分支,git pull
只会更新当前分支) 加git rebase <远程分支>
- 例:
git fetch
加git rebase origin/master
,此后,当前分支为master
- 例:
git push
-
提交本地更新
-
git push
会将当前分支变更上传到指定的远程仓库,并在远程仓库上合并你的新提交记录 -
将会更新当前分支对应的远程分支
-
git push
不带任何参数时的行为与 Git 的一个名为push.default
的配置有关。它的默认值取决于使用的 Git 的版本 -
在项目中进行推送之前,最好检查一下
push.default
的配置
1 | 1. git push -f origin master //本地强行覆盖远端,慎用 |
示例
远程仓库和本地仓库都有新的变更
1 | git fetch --rebase // 远程拉取最新记录,将本地最新记录合并至新分支(git fetch + git rebase <分支名>) |
远程服务器拒绝直接推送(push)提交到 main
- main 被锁定了, 需要一些 Pull Request 流程来合并修改。
1 | // 新建一个分支feature, 推送到远程服务器 |
本地初始化仓库与远程仓库合并
1 | git remote add origin <远程仓库地址> # 与远程仓库建立连接,默认origin |
本地管理仓库
- 安装GIT
- 常用命令
1 | // 初始化 |