wangjing013 / blog

📝 记录

Home Page:https://wangjing013.github.io/blog/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Git 常见操作

wangjing013 opened this issue · comments

常用操作

分支管理

  • 创建分支
// 默认会基于当前所处分支进行创建,比如本地当前分支是 master , 那么 feat_branch 基于 master 创建的
git checkout -b feat_branch

// 指定基于远程分支创建
git checkout -b feat_branch origin/master
git checkout -b feat_branch origin/dev
git checkout -b feat_branch origin/fat
  • 推送分支到远程
git push --set-upstream origin feat_branch
  • 切换分支
git checkout branch_name
  • 删除分支
// 删除本地分支
git branch -D feat_branch
// 删除远程分支
git push origin --delete feat_branch

git merge

git checkout master
git merge feat_branch

git rebase

下面通过一个具体的案例:

  1. 现在基于 master 创建一个新的分支 feat_base、开发过程中发现线上问题紧急修复, 则创建hotfix 分支, 如下:

  1. hotfix 完成后合并到 master 并完成上线操作. 继续切回 feat_base 进行开发.

  1. 现在 feat_base 也开发完成, 通过 git rebase 完成变基操作.
// 执行如下命令
git checkout feat_base
git rebase master

git rebase 主要做了几件事:

  • 找到 feat_basemaster 的共同祖先元素
  • 对比当前分支feat_base相对于该祖先```C3``的历次提交,提取相应的修改并存为临时文件.
  • 将当前分支指向目标基底 C4, 最后以此将之前另存为临时文件的修改依序应用.

流程如下:

  1. 现在切换 master 进行一次快进合并
git checkout master
git merge feat_base

最终执行后如下:

rebase 应该遵守原则

不要对在你的仓库外有副本的分支执行变基.

变基操作的实质是丢弃一些现有的提交, 然后相应地新建一些内容一样但实际上不同的提交.

rebase vs merge

总的原则是, 只对尚未推送或分享给别人的本地修改执行变基操作清理历史, 从不对已推送至别处的提交执行变 基操作, 这样, 你才能享受到两种方式带来的便利

暂存

当接收到新需求时, 通常步骤就是切换新的分支在这个功能分支上进行开发. 有时忘记该操作就直接在当前分支(例如 master)上进行修改, 遇到这样情况怎么处理? 可以使用 git stash 功能.

// 当前分支 master
git stash // 暂存

// 切换到其它分支, 重新应用
git checkout feat_branch
git stash pop

// 其它命令
git stash list // 查询当前项目中存贮的stash列表(上面会有是在哪个分支上保存的代码,很清晰的呦)
git stash apply [stash@{0}] //  重新获取之前保存的代码,可以在另外的分支, 也可以在同一分支([]中括号内为可选参数,需要获取第几次的保存,默认为全部,注:会保留之前的stash列表)
git stash pop [stash@{0}] // 作用同上,区别是: 1> 中括号内的参数可选,默认为获取第一次 2> 不会保留stash列表
git stash show -p [stash@{0}] | git apply -R // 可用来还原获取保存代码之前的状态。中括号内默认为第一条。只用用apply获取的才可以还原的呦
git stash drop [stash@{0}] // 删除stash记录,默认删除第一条
git stash clear // 清空所有stash记录

拣取特定内容

有时我们并行开发多个版本, 比如 V2.0V3.0, 现在 V3.0 分支上有几个特色功能, 现在想把这部分添加到V2.0 版本中, 怎么做呢? git cherry-pick

  • 先查看 V3.0 上的 commit 记录
git checkout V3.0
git log

日志如下:

commit 44ae486dbb8bcf5aa984d21783995115f57ff9b4 (HEAD -> feat_combo, origin/feat_combo, origin/ch_goodsCenter, ch_goodsCenter)
Author: wjJSBlog <974742841@qq.com>
Date:   Mon May 17 16:24:23 2021 +0800

    feat: 修改视频课展示问题

commit 088089ff10f357697b578cce3f7bd3d971d936c1
Author: wjJSBlog <974742841@qq.com>
Date:   Mon May 17 15:50:52 2021 +0800

    feat: 套餐课数量修改
  • 切换 V2.0
// 切记活动
git checkout V2.0
// 拣取
git cherry-pick 44ae486dbb8bcf5aa984d21783995115f57ff9b4 088089ff10f357697b578cce3f7bd3d971d936c1
// 提交
git push

查看某个文件更新日志

  • 查看某个文件的commit记录
git log filename
  • 查看文件每次提交的diff
git log -p filename    // 查看文件每次提交的diff
  • 列出文件的所有改动历史
git log --pretty=oneline filename // 列出文件的所有改动历史
  • 只查看某次提交的文件变化
git show 提交生成的一次哈希值 filename   // 只查看某次提交的文件变化

回滚

分支进行回滚操作

  • 切换分支
git checkout master

基于 tag 回滚

  • 查看 tag
// 显示tag列表
git tag
// 查看具体tag的 commmit id
git show xxtag_name
  • 通过 commit id 回滚到特定的版本
git reset --hard "commit id"
  • 把分支提交远程
git push -f origin master

修改commit message

git commit --amend

如何保存 Git 用户名和密码

  • 重置Git账号
git config --system --unset credential.helper

How to reset git authentication?

  • 保存Git账号
git config --global credential.helper store

How can I save username and password in Git?

git remote

  • 查看远程源
git remote -v
  • 更改远程源
git remote set-url <remote_name> <remote_url>
git remote set-url origin https://git-repo/new-repository.git
  • 更改远程源为 SSH
git remote set-url <remote_name> <ssh_remote_url>
git remote set-url origin git@github.com:user/repository.git