XuLizhao 's Notes

时光,漫步


  • 首页

  • 技术

  • 文档

  • 关于

  • 搜索
close

Git备忘

时间: 2017-11-27 更新于: 2022-03-28   |   分类: Tech     |   阅读: 1305 字 ~3分钟

Git 使用笔记

Git命令

Git命令解释

  • pull: 合并远程代码
  • fetch: 从远程下载最新代码,但不会merge或rebase
    • -all: 下载所有分支
  • reset: 重置master到fetch的最新代码
    • –hard: 改变本地工作树以匹配origin/master

基本配置

    # 列出当前项目主要配置
    git config --list
    # 编辑当前项目配置文件
    vi .git/config
    # 修改全局配置
    vi ~/.gitconfig 

常用命令

# 同步远程分支
git fetch
# 列出所有分支
git branch -a
# 切换分支
git checkout new_branch
# push到远程
git push --set-upstream origin new_branch

# 删除分支
git push -d <remote_name> <branch_name>
git branch -d <branch_name>

# merge某commit, 使用cherry-pick
git cherry-pick 0d31

用户信息

git config user.name 'xulizhao'
git config user.email xulizhao@email.com

# 全局设置
git config --global user.name 'xulizhao'
git config --global user.email xulz@users.noreply.github.com

# 修改最后一次提交
git commit --amend --reset-author

vi .git/config

# 增加
[user]
        name = xulz
        email = xulz@users.noreply.github.com

Stash

# 基本命令
git stash save 'your_stash_name WIP'
git stash apply stash^{/keyword}
git stash show stash ^{/keyword} -p


# 从stash创建新分支
git stash branch <new-branch-name> [stash-id]

其他命令

# 避免本地的修改提交到仓库
git update-index --assume-unchanged <file>

# 重新提交
git update-index --no-assume-unchanged <file>

Git常见场景用法

新建项目仓库

# 把当前项目加入git版本管理
git init
# 提交文件变更
echo "xulz" >> contributors.txt
git add contributors.txt
git commit -m 'Initial commit with contributors'

推送变更

# 关联远程仓库
git remote add origin git@github.com:xulz/test.git
# 推送本地变更到远程仓库
git push -u origin master
# 以上简写为$ git push
git push -u origin --all # pushes up the repo and its refs for the first time
git push -u origin --tags # pushes up any tags
# push遇到错误 ! [rejected]        master -> master (non-fast-forward)
# 风险: 可能会造成remote丢失提交
git push --force --set-upstream origin master

Fork同步上游仓库

# 查看当前远程仓库
git remote -v
git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git
# 获取更新
git fetch upstream
git checkout master
git rebase upstream/master
# rebase 优于 merge
~~git merge upstream/master~~

强制pull/处理本地冲突

如果需要保存

  • 本地提交: git branch new-branch-to-save-current-commits
  • 未提交变更: git stash 然后 git stash pop
# git force pull
git fetch origin master

# 删除本地commits
git reset --hard origin/master

# 删除本地untracked文件
git clean -f -d

从git删除而保留本地文件

# untrack/从git删除而保留本地文件
git rm -r --cached folder
git rm --cached file1 file2
git commit -m 'chore: remove file'
git push

删除大文件或敏感数据

  • BFG Repo-Cleaner
java -jar bfg.jar --strip-blobs-bigger-than 100M some-big-repo.git
cd some-big-repo.git
# 清除脏数据
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push --all

部分合并分支

git checkout dev -- FILE_YOU_WANT
git cherry-pick $COMMIT_ID_YOU_WANT

撤销上次提交

# 删除提交和文件的修改
git reset --hard

# 删除提交,但保留文件修改
git reset --soft HEAD^1

# 删除文件修改后再次找回
git reflog

实践

Branch 分支使用

分支的习惯用法:

origin/master 应该始终保持生产环境可用的状态,即可部署. origin/develop 代表最新的code, 是nightly测试的重点. 如果稳定到可以release,需要为新发布创建新tag,并merge回 master.

提交规范

  • feat 增加新功能
  • fix 修复问题/BUG
  • style 代码风格相关无影响运行结果的
  • perf 优化/性能提升
  • refactor 重构
  • revert 撤销修改
  • test 测试相关
  • docs 文档/注释
  • chore 依赖更新/脚手架配置修改等
  • workflow 工作流改进
  • ci 持续集成
  • mod 不确定分类的修改
  • wip 开发中
  • types 类型修改

Tag 标签

推荐为每次软件发布创建标签.

# 为当前版本创建tag
git tag v1.0.0

Git工作流

  • Git 工作流程

追踪二进制文件

  • 指定为二进制文件
  • Git LFS 需要客户端安装LSF支持,服务端勾选LFS(Github、BitBucket、Gitlab已支持)
git lfs install
git lfs track "*.mp3"

# uninstall 
git lfs uninstall
touch **/*.mp3
git commit -a

扩展阅读

学习资源

如果是新手,强烈推荐阅读Git简明教程, 进阶必读 Pro Git中文版

  • Bitbucket Git Tutorials
  • how-to-merge-specific-files-from-another-branch
  • Removing sensitive data from a repository
  • 解决不同系统间换行符的问题

学习

  • Bitbucket Tutorials
  • learnGitBranching
  • Git Immersion:交互式基础学习
  • git commit规范

GitHub

  • 当月流行趋势
  • 如何同步分支
  • 搜素: start: > 1000 / location:China / language:go
  • 存储大文件:Git LFS,把大文件存储在GitHub

安全

  • blackbox:加密存储敏感信息
  • 本文作者: xulizhao
  • 本文链接: https://xulizhao.com/blog/git/
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
Jenkins持续集成工具
新博客
  • 文章目录
  • 站点概览

xulz

时光,漫步

56 日志
3 分类
28 标签
  • Git命令
    • 基本配置
    • 常用命令
    • 用户信息
    • Stash
    • 其他命令
  • Git常见场景用法
    • 新建项目仓库
    • 推送变更
    • Fork同步上游仓库
    • 强制pull/处理本地冲突
    • 从git删除而保留本地文件
    • 删除大文件或敏感数据
    • 部分合并分支
    • 撤销上次提交
  • 实践
    • Branch 分支使用
    • 提交规范
    • Tag 标签
    • Git工作流
    • 追踪二进制文件
  • 扩展阅读
    • 学习资源
    • 学习
    • GitHub
    • 安全
© 2017 - 2023 XuLizhao 's Notes
Powered by - Hugo/ NexT
津ICP备17010344号-1
0%