git init : 初始化 git 仓库
git clone 克隆 git 远程仓库
git config: 用于修改 git 配置(文件)
git config --global user.name "coderkxh" :
全局修改当前 git 提交时的用户
git config --global user.email "[email protected]" :
全局修改当前 git 提交时的用户邮箱
git config --global alias.ci commit :
配置命令别名(←: 后续就可以直接通过 git ci-m "desc" 来进行使用 "commit" 提交命令)
git 状态划分: Untracked / Unmodified / Modified / Staged(译: 未追踪 / 未修改 / 已修改 / 暂存区中的文件状态(new file / modified / ...))
git status :
查看当前状态,也可以通过 "git status -s / git status --short" 命令查看更加简洁的状态信息
git add . :
将所有文件添加到暂存区(也可以通过 git add 指定某个文件添加如暂存区)
git commit -m "提交信息" :
将暂存区中的文件更新提交
git commit -a -m "提交信息" :
我们可以通过该命令将 add 跟 commit 操作结合使用(即: git commit -a -m “提交信息” = git add . + git commit -m "提交信息")
git log: 查看历史提交
git reset: 版本回退
git --soft/--hard //
--mixed: 默认命令参数,表示可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变
--soft: 参数用于回退到某个版本
--hard: 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交(注意: 谨慎使用 –-hard 参数,它会删除回退点之前的所有信息)
HEAD 说明:
HEAD 表示当前版本 -> HEAD^ 上一个版本 -> HEAD^^ 上上一个版本 -> 以此类推...
HEAD~0 表示当前版本 -> HEAD~1 上一个版本 --> HEAD^2 上上一个版本 -> 以此类推...
commit_hash: 提交 hash 值,通过 git log 命令查看对应提交 hash
git 忽略文件 “.gitignore” 文件: 该文件可以配置一些无需 git 仓库管理的文件(如忽略如下文件 ↓ ...)
.DS_Store
node_modules
*.log
explorations
TODOs.md
RELEASE_NOTE*.md
packages/server-renderer/basic.js
packages/server-renderer/build.dev.js
packages/server-renderer/build.prod.js
packages/server-renderer/server-plugin.js
packages/server-renderer/client-plugin.js
packages/template-compiler/build.js
packages/template-compiler/browser.js
.vscode
dist
temp
types/v3-generated.d.ts
远程服务器
git remote:
查看远程服务器
git remote -v/--verbose:
查看远程服务器并列出对应URL
git remote add
添加远程仓库
git remote rename
重命名远程仓库
git remote set-url
修改远程仓库 url
git remote remove
移除某个远程仓库
git remote show
显示指定远程仓库的详细信息,包括 URL 和跟踪分支
git push -u
提交某一分支内容至远程仓库
git pull
拉取远程仓库中的代码(fetch)
如果想要不写参数而是直接通过 "git pull" 拉取仓库代码时,需要给当前分支设置一个追踪点,如 →:
git branch --set-upstream-to=origin.master
拒接合并不相关历史:
简单来说就是:过去git merge允许将两个没有共同基础的分支进行合并,这导致了一个后果:新创建的项目可能被一个毫不 怀疑的维护者合并了很多没有必要的历史,到一个已经存在的项目中,目前这个命令已经被纠正,但是我们依然可以通过-- allow-unrelated-histories选项来逃逸这个限制,来合并两个独立的项目
git merge --allow-unrelated-histories
远程仓库常用操作:
1. 从远程仓库clone代码:将存储库克隆到新创建的目录中:
git clone
2. 将代码push到远程仓库:将本地仓库的代码推送到远程仓库中:
git push -u
3. 从远程仓库fetch代码:从远程仓库获取最新的代码:
(1) git fetch / git fetch origin
// -- 默认情况下是从origin中获取代码
(2) git merge
// -- 获取到代码后默认并没有合并到本地仓库,我们需要通过merge来合并
4. 从远程仓库pull代码:上面的两次操作有点繁琐,我们可以通过一个命令来操作:
(1) git pull / git pull
// -- 该 "git pull" = "git fetch" + "git merge"
合并冲突: 上面我们通过pull从Git远程仓库获取到分支内容后会自动进行合并(merge),但是并非所有的情况都可以正常的合并,某些情况下合并会出现冲突
冲突区域表示的序列符号: <<<<<<< & ======= & >>>>>>>
+ <<<<<<< 和 ======= 之间的所有内容都是你的本地修改
+ ======= 和 >>>>>>> 之间的所有行都是来自远程版本库或另一个分支的修改
+ 需要自行研究这两个部分并做出决定,进行手动合并对应代码(删除 | 保留 | ...)
<<<<<<<
本地修改
=======
另一分支的修改
>>>>>>> change_site
git 标签(tag):
git tag / git tag -m "描述信息":
创建 git 标签
git push oritin / git push origin --tags:
在 push 到远程仓库时,也添加对应的标签
git tag -d / Deleted tag :
删除本地仓库上的标签
git push origin --delete :
删除远程仓库中的标签
git 分支:
git branch:
查看分支
git branch -v:
查看分支,同时展示每个分支的最后一次提交
git branch :
创建分支
git checkout :
切换分支
git checkout -b :
创建分支并切换至该分支
git merge :
合并分支(将 分支合并到当前分支上)
已经合并的分支我们不再需要时,那么可以将其移除掉
git branch --merged:
查看所有合并到当前分支中的分支
git branch --no-merged:
查看所有没有合并到当前分支中的分支
分支合并冲突与上面代码拉取部分同理
git branch -d / git branch -D :
删除某一个分支 / 强制删除某一个分支
git 远程分支: 远程分支是也是一种分支结构(以
git branch -r:
查看远程分支
git push origin
将本地分支推送至远程仓库
git push origin --delete
删除远程分支
git branch --set-upstream-to=origin/
将本地分支与远程分支进行关联
git rebase 用法(变基):
git rebase :
使当前分支的基移至某一分支(前提: 只能再当前分支的基础上向前移,不能向后移,即: 旧向新 rebase)
rebase 和 merge 的选择:
merge: 用于记录 git 的所有历史,那么分支的历史错综复杂,也全部记录下来
rebase: 用于简化历史记录,将两个分支的历史简化,整个历史更加简化
注意: rebase 有一条黄金法则,就是 "永远不要在主分支上使用 rebase" 因为 rebase 会将 git 历史给简化,所以为了避免主分支 master/main 的历史在提交时不会有太大的变化,不要再主分支上进行 rebase
git 工作流(git flow): 由于 git 分支使用的便捷性,产生了很多 git 的工作流(在项目开发周期的不同阶段,可以同时创建多个开发的分支,进行对应的开发管理等,可以定期地把某些主题分支合并到其它的分支中)
如以下工作流:
(1) master/main: 作为主分支
(2) develop: 作为开发分支,并且有稳定的版本时,再合并到 master/main 主分支中
(3) topic: 作为某一个主题、功能、特性的分支进行开发,开发完成后合并到 develop 开发分支中
...
常见工作流:
(1) master/main: 主分支
(2) hotfix: bug 处理分支
(3) develop: 开发分支
(4) feature: 新功能开发分支