xvno / blog

个人博客, 不定期发布技术笔记和个人随笔.
0 stars 0 forks source link

Git: Tips #48

Open xvno opened 5 years ago

xvno commented 5 years ago

Refs

Tips

change branch name and push to github

git branch -m master main
git fetch origin
git branch -u origin/main main

if other one changed branch name, also

git branch -m master main
git fetch origin
git branch -u origin/main main
git remote set-head origin -a
xvno commented 5 years ago

粒度划分

细粒度

以"完成"以下任意一项

  1. 某一项功能 或 代码段
  2. 添加必要文件/更改目录结构 + 更新必要配置
  3. 修改所有需要改正的字段/话述

独立

  1. 每个提交不应该包含跟它的comment无关的变更, 即描述要覆盖所有变更(细粒度的变更更容易描述, 但<细粒度.3>要满足)
  2. 不依赖"第三方分支": merge/rebase操作, 不应对除master, release, dev(develop), raw 之外的第三方分支使用. 项目成员分支间的依赖不应该存在, 即在合并到raw(develop)上之前是不能相互merge/rebase的

commit/comment

[<jira-id>: ]<动作类型>: [<模块/文件/功能等逗号分隔>:]+ <简要说明>

动作类型: Add, Rmv, Mdf, Dbg, Opt 模块/文件/功能 简要说明

# 实例
# ": "是英文标点加空格
# 尽量使用原有的词汇, 不要直接翻译成中文

Add: login: logo文件
Mdf: login: footer 配色 和 文案
Rmv: user: 无用的大尺寸图片
SHARP-1008: Dbg: login, user: style: sass文件除虫
SHARP-1009: Opt: profile: 
xvno commented 5 years ago

命令

xvno commented 5 years ago

git init

此命令自不必说, 在本"目录"[pwd]初始化一个代码仓库(repo), 最好第一个提交仅仅包含.gitignore README等初始化文件.

e.g. 如果远程有一个空仓, 比如在github上创建了一个repo2, 要把新创建的本地仓库推送到远程仓库:

xvno commented 3 years ago

git add

该命令两种功能:

  1. 追踪新的文件
  2. 把新的变更放入暂存区

配合 git commit命令使用

xvno commented 3 years ago

git commit -m '<comment>'

该命令用于提交代码: 将暂存区中的新文件和新的变更提交到本地仓库中 -m 参数用于引导添加"提交说明(commit comment)" 已经在上文commit/comment中详细描述

xvno commented 3 years ago

拉取代码git pull, git pull --rebase

该命令用于从远程仓库拉取代码到本地, 默认当前分支, 还可以加参数git pull <repo2-alias> <repo2-branch-name>来拉取对应分支

git pull --rebase在拉取远程分支的时候还顺便处理rebase, 而非merge

xvno commented 3 years ago

推送代码 git push, git push <repo2-alias> <repo2-branch-name>

推送分支到远程服务器

xvno commented 3 years ago

合并 git merge

不多说了, 废柴操作~

xvno commented 3 years ago

git checkout

功能

  1. 切换当前分支为: git checkout <branch-name>, 另外可以用 -b 参数来检出制定提交为新分支git checkout <commit-id> -b <new-branch-name>
  2. 移动HEAD到对应的提交点 git checkout <commit-id>
  3. 用以还原文件: 从上一次的提交点里恢复文件, 覆盖当前的修改
    git checkout -f <fileName>
    git checkout -p <pathOfFolder>
xvno commented 3 years ago

git reset -- <file-names>

Reset-Demystified

xvno commented 3 years ago

遴选 git cherry-pick <commit id>

这个功能相当有意思, 能把某个指定的提交点作为补丁添加到当前分支的最前端. 使用场景很单调: 把合格的提交点摘取到重要的分支上. e.g. 我把自己的3个提交在我自己的分支 xvno 上rebase-squash成了一个提交点 mixed, 切换到develop分支上后, 直接git cherry-pick <mixed: commit-id>

xvno commented 3 years ago

合并/摘选 指定提交点, 变基到指定分支/提交点 git rebase -i <commit id>, git rebase --continue

一般用于合并提交点 git的神器之一 rebase, 无出其右者, 加上-i之后, 就可以修改提交comment + 合并提交点 + 丢掉提交点... 添加--continue之后, 能让暂停的rebase过程继续

xvno commented 3 years ago

藏私房代码的地方 git stash push/pop/list/clear/apply

stash: 藏匿处, 暗格;

git stash 可以把已经 git add 的变更移动到暗格里. 应用场景:

xvno commented 3 years ago

远程仓库 git remote

做什么用?

  1. 本地仓库关联了哪些远程仓库, git remote -v
  2. 添加远程仓库, git remote add <repo-name> <repo-uri>

有了remote, 就可以光明正大的 git push <repo-name> <branch-name>

xvno commented 3 years ago

分支管理 branch

git branch

参数 r 表示 remote-tracking

  1. 检出新分支
  2. -avr, 查看分支
  3. -dDr, 删除分支

真正删除远程分支的方式 git push <repo-name> :<branch-name>

git checkout -b 就当前提交点新建一个分支

git checkout -b newbie
xvno commented 3 years ago

实例演示

用1个实例演示日常工作流程

已经推送新建的本地仓库到github

  1. 调研需求, 并切换到目标分支, 拉取最新代码
  2. 从当前提交点检出新的分支, 并在该分支上开发
  3. 紧急任务来了, 我要优先处理
  4. 我是谁, 我从哪里来, 我要干什么?
  5. 我做完了, 得合并细小提交
  6. 我还得把开发结整合到master上, 并删掉当前分支
  7. todo列表上的下一个项目来了
  8. 这是一个循环