Bootstrap

Git 常见命令总结

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),但是并非所有的情况都可以正常的合并,某些情况下合并会出现冲突

      • base64

      • 冲突区域表示的序列符号: <<<<<<< & ======= & >>>>>>>
        	+ <<<<<<< 和 ======= 之间的所有内容都是你的本地修改
        	+ ======= 和 >>>>>>> 之间的所有行都是来自远程版本库或另一个分支的修改
        	+ 需要自行研究这两个部分并做出决定,进行手动合并对应代码(删除 | 保留 | ...)
        		<<<<<<<
        		本地修改
        		=======
        		另一分支的修改
        		>>>>>>> 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: 新功能开发分支
;