文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

10个节省时间和改善工作流的Git技巧

2024-12-24 19:22

关注

这 10 个 Git 小技巧,不仅可以节省时间,而且能改善你的工作流程。

根据手册,Git 被定义为傻瓜式内容追踪器,它功能丰富,但有些功能却让人望而生畏。因此,我们只是重复使用那几个被记住的命令,而没有充分使用。

https://manpages.debian.org/stretch/git-man/git.1.en.html

技巧 1:优化配置

Git 在全局、用户和本地级别上都是高度可配置的。

https://git-scm.com/docs/git-config

查找顺序

每个设置都可以被覆盖:

  1. $CWD/.git/config 
  2.     ▼ ▼ ▼ 
  3. $HOME/.gitconfig` 
  4.     ▼ ▼ ▼ 
  5. $HOME/.config/git/config 
  6.     ▼ ▼ ▼ 
  7. /etc/gitconfig 

修改设置

用你喜欢的编辑器或者 CLI 编辑任何配置文件:

  1. # 全局设置 
  2. git config --global   
  3. # 本地设置 
  4. git config   

如果值包含空格字符,则需要用引号引起来。

显示当前设置

  1. # 显示当前设置及其来源 
  2. git config --list --show-origin 

一些有用的配置

  1. # 设定身份 
  2. git config --global user.name "" 
  3. git config --global user.email  
  4. # 首选编辑器 
  5. git config --global core.editor vim 
  6. # 证书缓存 
  7. # WINDOWS 
  8. git config --global credential.helper manager 
  9. # LINUX (超时时间——以秒为单位) 
  10. git config --global credential.helper "cache --timeout=3600" 
  11. # MACOS 
  12. git config --global credential.helper osxkeychain 

https://git-scm.com/docs/gitcredentials

技巧 2:别名(alias)

创建一个别名来保存常用的 git 命令:

  1. # 创建别名 
  2. git config --global alias. "" 
  3. # 使用别名 
  4. git   

一些有用的别名

  1. # 撤销上次提交 
  2. git config --global alias.undo "reset --soft HEAD^" 
  3. # 将暂存区更新修订到上次提交 (不改变提交信息) 
  4. git config --global alias.amend "commit --amend --no-edit" 
  5. # 压缩的状态输出 
  6. git config --global alias.st "status -sb" 
  7. # 用 GRAPH 为日志着色 
  8. git config --global alias.lg "log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'" 
  9. # 删除所有已合并的分支 
  10. git config --global alias.rmb "!git branch --merged | grep -v '*' | xargs -n 1 git branch -d" 
  11. # 贡献排行 
  12. git config --global alias.rank "shortlog -n -s --no-merges" 

技巧 3:查找 Commits 和更改

通过 Commits 信息查找

  1. # 通过 commit 信息查找 (所有分支) 
  2. git log --all --grep='' 
  3. # 通过 commit 信息查找 (包含 reflog) 
  4. git log -g --grep='' 

通过更改查找

  1. # 通过更新的内容查找 
  2. git log -S '' 

通过日期查找

  1. # 通过日期范围查找 
  2. git log --after='DEC 15 2019' --until='JAN 10 2020' 

技巧 4:添加 hunk

git add 不仅能添加文件的所有变更,--path / -p参数还可以交互式暂存区块。

  1. # 补丁命令 
  2. y = 暂存区块 
  3. n = 不暂存这个区块 
  4. q = 退出 
  5. a = 暂存当前文件的此区块以及所有剩余区块 
  6. d = 不暂存当前文件的此区块以及所有剩余区块 
  7. / = 查找区块 (正则表达式) 
  8. s = 划分成更小的区块 
  9. e = 手动编辑区块 
  10. ? = 打印帮助说明 
  11. g = 选择要前往的区块 
  12. j = 将区块设为未定,查看下一个未定区块 
  13. J = 将区块设为未定,查看下一个区块 
  14. k = 将区块设为未定,查看上一个未定区块 
  15. J = 将区块设为未定,查看下一个区块 

https://git-scm.com/docs/git-add#Documentation/git-add.txt--i

技巧 5:储藏(stash)更改而不提交

stash 将当前的更改临时搁置起来。在它的帮助下,可以返回当前状态的索引,并能在稍后应用已储藏的更改。

默认情况下,仅储藏当前跟踪文件中的更改,新文件将被忽略。

我们可以独立地创建和应用多个 stash。

https://git-scm.com/docs/git-stash

创建

  1. # 创建新的 STASH 
  2. git stash 
  3. # 创建新的 STASH (包含未追踪的更改) 
  4. git stash -u/--include-untracked 
  5. # 创建新的 STASH 并命名 
  6. git stash save "" 
  7. # 交互式储藏 
  8. git stash -p 

罗列

  1. # 列出所有的 STASH (为其他命令提供"n"
  2. git stash list 

浏览

  1. # 浏览 STASH 内容 
  2. git stash show 
  3. # 浏览 STASH 差异 
  4. git stash show -p 

应用

  1. # 应用上一个 STASH (删除 stash) 
  2. git stash pop 
  3. # 应用上一个 STASH (保留 stash) 
  4. git stash apply 
  5. # 应用特定的 STASH (n = stash 列表序号) 
  6. git stash pop/apply stash@{n} 
  7. # 从 STASH 创建新的分支 (n = stash 列表序号) 
  8. git stash branch <new branch name> stash@{n} 
  9. # 从 STASH 应用单个文件 (n = stash 列表序号) 
  10. git checkout stash@{n} --  

清理

  1. # 删除特定的 STASH (n = stash 列表序号) 
  2. git stash drop stash@{n} 
  3. # 删除所有的 STASH 
  4. git stash clear 

技巧 6:空运行(Dry Run)

许多 git 操作可能具有破坏性,例如,git clean -f将删除所有未跟踪的文件,而且无法恢复。

要避免出现这种灾难性的结果,许多命令都支持dry-run,可以在实际产生结果前对其进行检查。不过遗憾的是,使用的选项不完全一致:

  1. git clean -n/--dry-run 
  2. git add -n/--dry-run 
  3. git rm -n/--dry-run 
  4. # GIT MERGE 模拟 DRY-RUN 
  5. git merge --no-commit --no-ff  
  6. git diff --cached 
  7. git merge --abort 

请注意,git commit -n根本不是dry-run!它实际上是--no-verify,作用是忽略所有pre-commit/commit-msg githooks。

技巧 7:安全强制推送

在处理旧的 commit、创建新的 head 等情况时时很容易弄乱分支。git push --force可以覆盖远程变更,但不应该这样做!

git push --force是一种具有破坏性且危险的操作,因为它无条件生效,并且会破坏其他提交者已经推送的所有 commit。这对于其他人的代码仓库来说不一定是致命的,但是改变历史记录并影响其他人并不是一个好主意。

更好的选择是使用git push --force-with-lease。

git 不会无条件地覆盖上游的远程仓库,而是检查是否有本地不可用的远程更改。如果有,它会失败并显示一条“stale info”消息,并告诉我们需要先运行git fetch。

https://git-scm.com/docs/git-push#Documentation/git-push.txt---force-with-leaseltrefnamegt

技巧 8:修改 commit 信息

Commit 是不可变的,且不能更改。不过可以用一条新的 commit 信息修订现有的 commit,这会覆盖原始 commit,因此请勿在已推送的 commit 中使用它。

  1. git commit --amend -m "" 

https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---amend

技巧 9:修改历史

修改代码仓库的历史不仅限于修改上次提交信息,使用git rebase可以修改多个提交:

  1. # 提交的范围 
  2. git rebase -i/--interactive HEAD~ 
  3. # 该 hash 之后的所有提交 
  4. git rebase -i/--interactive  

在配置的编辑器中倒序列出所有的 commit,像这样:

  1.    
  2. pick 5df8fbc revamped logic 
  3. pick ca5154e README typos fixed 
  4. pick a104aff added awesome new feature 

通过更改编辑器中的实际内容,可以为 git 提供一个方案,来说明如何进行 rebase:

  1. # p, pick   = 使用提交而不更改 
  2. # r, reword = 修改提交信息 
  3. # e, edit   = 编辑提交 
  4. # s, squash = 汇合提交 
  5. # f, fixup  = 类似"squash",但是会丢弃提交信息 
  6. # x, exec   = 运行命令 (其余行) 
  7. # d, drop   = 移除提交 

保存编辑器后,git 将运行该方案以重写历史记录。e, edit会暂停 rebase,就可以编辑代码仓库的当前状态。完成编辑后,运行git rebase --continue。

如果过程中出现问题(例如合并冲突),我们需要重新开始,可以使用git rebase --abort。

https://git-scm.com/docs/git-rebase

技巧 10:存档跟踪文件

可以使用不同格式(zip或tar)来压缩特定引用的跟踪文件:

  1. git archive --format  --output   

可以是一个分支、commit hash 或者一个标签。

https://git-scm.com/docs/git-archive

额外提醒:单破折号

有一个快捷方式可以表示刚用过的分支:一个单破折号-

  1. git checkout my-branch 
  2. # 当前分支:my-branch 
  3. <do some git operations, e.g. adding/commiting> 
  4. git checkout develop 
  5. # 当前分支:develop 
  6. git merge - 
  7. # 将 my-branch 合并到 develop 

单破折号等同于@{-1}。

https://git-scm.com/docs/git-checkout#Documentation/git-checkout.txt-ltbranchgt

总结

Git 还有很多话题可谈,这里只涉及一些皮毛。在另一篇文章中,我想展示如何用git bisect有效查找损坏的 commit,或者如何通过git reflog来运用任意git操作的完整历史记录。

 

来源:架构头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯