Git 常用命令总结
git init : 初始化 git 仓库
git clone <clone_path>: 克隆 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 <filename> 指定某个文件添加如暂存区)
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 <Head^>/<Head~>/<commit_hash>
-
--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 <remote-name> <url>:
添加远程仓库
-
git remote rename <old-name> <new-name>:
重命名远程仓库
-
git remote set-url <remote-name> <new-remote-url>:
修改远程仓库 url
-
git remote remove <remote-name>:
移除某个远程仓库
-
git remote show <remote-name:>
显示指定远程仓库的详细信息,包括 URL 和跟踪分支
-
git push -u <remote-name>/<remote-url> "<branch-name>":
提交某一分支内容至远程仓库
-
git pull <remote-name>/<remote-url> <branch>
拉取远程仓库中的代码(fetch)
-
如果想要不写参数而是直接通过 "git pull" 拉取仓库代码时,需要给当前分支设置一个追踪点,如 →:
git branch --set-upstream-to=origin.master
-
拒接合并不相关历史:
简单来说就是:过去git merge允许将两个没有共同基础的分支进行合并,这导致了一个后果:新创建的项目可能被一个毫不 怀疑的维护者合并了很多没有必要的历史,到一个已经存在的项目中,目前这个命令已经被纠正,但是我们依然可以通过-- allow-unrelated-histories选项来逃逸这个限制,来合并两个独立的项目
git merge --allow-unrelated-histories
-
远程仓库常用操作:
-
1. 从远程仓库clone代码:将存储库克隆到新创建的目录中:
git clone <remote-name>/<remote-url>
-
2. 将代码push到远程仓库:将本地仓库的代码推送到远程仓库中:
git push -u <remote-name>/<remote-url> "<branch-name>" / git push(前提: 已经执行过左边的命令,提交过一次)
-
3. 从远程仓库fetch代码:从远程仓库获取最新的代码:
(1) git fetch / git fetch origin
// -- 默认情况下是从origin中获取代码
(2) git merge
// -- 获取到代码后默认并没有合并到本地仓库,我们需要通过merge来合并
-
4. 从远程仓库pull代码:上面的两次操作有点繁琐,我们可以通过一个命令来操作:
-
(1) git pull / git pull <remote-name> <banch>:
// -- 该 "git pull" = "git fetch" + "git merge"
-
合并冲突: 上面我们通过pull从Git远程仓库获取到分支内容后会自动进行合并(merge),但是并非所有的情况都可以正常的合并,某些情况下合并会出现冲突
-
冲突区域表示的序列符号: <<<<<<< & ======= & >>>>>>> + <<<<<<< 和 ======= 之间的所有内容都是你的本地修改 + ======= 和 >>>>>>> 之间的所有行都是来自远程版本库或另一个分支的修改 + 需要自行研究这两个部分并做出决定,进行手动合并对应代码(删除 | 保留 | ...) <<<<<<< 本地修改 ======= 另一分支的修改 >>>>>>> change_site
-
git 标签(tag):
git tag <tag-name> / git tag <tag-name> -m "描述信息":
创建 git 标签
git push oritin <tag-name> / git push origin --tags:
在 push 到远程仓库时,也添加对应的标签
git tag -d <tag-name> / Deleted tag <tag-name>:
删除本地仓库上的标签
git push origin --delete <tag-name>:
删除远程仓库中的标签
git 分支:
git branch:
查看分支
git branch -v:
查看分支,同时展示每个分支的最后一次提交
git branch <branch-name>:
创建分支
git checkout <branch-name>:
切换分支
git checkout -b <branch-name>:
创建分支并切换至该分支
git merge <branch-name>:
合并分支(将 <branch-name> 分支合并到当前分支上)
已经合并的分支我们不再需要时,那么可以将其移除掉
git branch --merged:
查看所有合并到当前分支中的分支
git branch --no-merged:
查看所有没有合并到当前分支中的分支
分支合并冲突与上面代码拉取部分同理
git branch -d <branch-name> / git branch -D <branch-name>:
删除某一个分支 / 强制删除某一个分支
git 远程分支: 远程分支是也是一种分支结构(以 <remote>/<branch> 的形式命名的)
-
git branch -r:
查看远程分支
-
git push origin <branch>:
将本地分支推送至远程仓库
-
git push origin --delete <branch>:
删除远程分支
-
git branch --set-upstream-to=origin/<branch-name> <branch-name>:
将本地分支与远程分支进行关联
git rebase 用法(变基):
git rebase <branch-name>:
使当前分支的基移至某一分支(前提: 只能再当前分支的基础上向前移,不能向后移,即: 旧向新 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: 新功能开发分支