养生 装修 购物 美食 感冒 便秘 营销 加盟 小吃 火锅 管理 创业 搭配 减肥 培训 旅游

常用的Git Tips

时间:2024-11-02 06:27:51

Git被越来越多的公司使用,因此我们需要了解Git使用过程中的一些技巧

工具/原料

GIT《Linux就该这么学》

方法/步骤

1、Configuration:配置列举所有的别名与配置gitconfig--listGit别名配置gitconfig--globalalias.gitconfig--globalalias.ststatus设置git为大小写敏感gitconfig--globalcore.ignorecasefalse

2、Help:常用的辅助查询命令在git命令行里查看everydaygitgithelpeveryday显示git常用的帮助命令githelp-g获取GitBash的自动补全~/.git-completion.bash&&echo'[-f~/.git-completion.bash]&&.~/.git-completion.bash'>>~/.bashrc设置自动更正gitconfig--globalhelp.autocorrect1

3、Remote:远端仓库配置获取所有远端引用配置gitremote或者gitremoteshow修改某个远端的地址gitremoteset-urloriginURLRepo查看当前仓库中的所有未打包的objects和磁盘占用gitcount-objects--human-readable从object数据库中删除所有不可达的objectgitgc--prune=now--aggressive

4、文件类操作,Cac丝群闻栝he:缓存,Track:文件追踪,展示所有被追踪的文件gitls-files-t展示所有未区仁苣逢被追踪的分支gitls-files--others展示所有被忽略的文件gitls-files--others-i--exclude-standard gitcheck-ignore* gitstatus--ignoredManipulation:操作停止追踪某个文件但是不删除它gitrm--cached<file_path或者gitrm--cached-r<directory_path强制删除未被追踪的文件或者目录gitclean-f gitclean-f-d gitclean-df清空.gitignoregitclean-X-fChanges:修改Info:信息查看查看上次提交之后的未暂存文件gitdiff查看准备用于提交的暂存了的修改的文件gitdiff--cached显示所有暂存与未暂存的文件gitdiffHEAD查看最新的文件版本与Stage中区别gitdiff--stageddd:追踪某个修改,准备提交Stage某个文件的部分修改而不是全部gitadd-pReset:修改重置以HEAD中的最新的内容覆盖某个本地文件的修改gitcheckout--<file_name>Stash:贮存Info:信息查看展示所有保存的StashesgitstashlistManipulation:操作Save:保存保存当前追踪的文件修改状态而不提交,并使得工作空间恢复干净gitstash或者gitstashsave保存所有文件修改,包括未追踪的文件gitstashsave-u或者gitstashsave--include-untracked

5、Apply:应用应用任何的Stash而不从Stash列表中删除gitstashapply<stash@{n}>应用并且删除Stash列表中的最后一个gitstashpop或者gitstashapplystash@{0}&&gitstashdropstash@{0}删除全部存储的Stashesgitstashclear或者gitstashdrop<stash@{n}>从某个Stash中应用单个文件gitcheckout<stash@{n}>--<file_path>或者gitcheckoutstash@{0}--<file_path>Commit:提交检索某个提交的Hash值gitrev-list--reverseHEAD|head-1Info:信息查看List:Commit列表查看自ForkMaster以来的全部提交gitlog--no-merges--stat--reversemaster..展示当前分支中所有尚未合并到Master中的提交gitcherry-vmaster或者gitcherry-vmaster<branch-to-be-merged>可视化地查看整个Version树gitlog--pretty=oneline--graph--decorate--all或者gitk-all查看所有在分支1而不在分支2中的提交gitlogBranch1^Branch2

6、Files:文件信息展示直到某次提交的全部文件谱驸扌溺列表gitls-tree--name-only-r<commit-ish>展示所有在某次提交中修改的文件gitdiff幻腾寂埒-tree--no-commit-id--name-only-r<commit-ish>展示所有对于某个文件的提交修改gitlog--follow-p--<file_path>Manipulation:关于提交的操作Apply:Commit确认或者应用利用cherry-pick将某个分支的某个提交跨分支的应用到其他分支gitcheckout<branch-name>&&gitcherry-pick<commit-ish>提交时候忽略Staging区域gitcommit-am<commitmessage>提交时候忽略某个文件gitupdate-index--assume-unchangedChangelog; gitcommit-a; gitupdate-index--no-assume-unchangedChangelog撤销某个故意忽略gitupdate-index--no-assume-unchanged<file_name>将某个提交标记为对之前某个提交的Fixupgitcommit--fixup<SHA-1>Reset:将当前分支的HEAD重置到某个提交时候的状态重置HEAD到第一次提交gitupdate-ref-dHEAD丢弃自某个Commit之后的提交,建议只在私有分支上进行操作。注意,和上一个操作一样,重置不会修改当前的文件状态,Git会自动将当前文件与该Commit时候的改变作为Changes列举出来gitreset<commit-ish>Undo&Revert:撤销与恢复某个Commit以创建一个新提交的方式撤销某个提交的操作gitrevert<commit-ish>恢复某个文件到某个Commit时候的状态gitcheckout<commit-ish>--<file_path>Update:修改某个Commit修改上一个提交的信息gitcommit-v--amend修改提交的作者信息gitcommit--amend--author='AuthorName<email@address.com>'在全局的配置改变了之后,修改某个作者信息gitcommit--amend--reset-author--no-edit修改前一个Commit的提交内容但是不修改提交信息gitadd--all&&gitcommit--amend--no-editBranch:分支Info:信息查看获取当前分支名gitrev-parse--abbrev-refHEADTag列举当前分支上最常用的标签gitdescribe--tags--abbrev=0List:分支枚举获取所有本地与远程的分支gitbranch-a只展示远程分支gitbranch-r根据某个Commit的Hash来查找所有关联分支gitbranch-a--contains<commit-ish> 或者 gitbranch--contains<commit-ish>Changes:某个分支上的修改情况查看查看两周以来的所有修改gitlog--no-merges--raw--since='2weeksago' 或者 gitwhatchanged--since='2weeksago'Merger:合并情况查看追踪某个分支的上游分支gitbranch-uorigin/mybranch列举出所有的分支以及它们的上游和最后一次提交gitbranch-vv列举出所有已经合并进入Master的分支gitbranch--mergedmasterManipulation:操作Checkout:检出与分支切换快速切换到上一个分支gitcheckout-不带历史记录的检出某个分支gitcheckout--orphan<branch_name>Remove:分支移除删除本地分支gitbranch-d<local_branchname>删除远程分支gitpushorigin--delete<remote_branchname> 或者 gitpushorigin:<remote_branchname>移除所有已经合并进入Master的分支gitbranch--mergedmaster|grep-v'^/*'|xargs-n1gitbranch-d移除所有在远端已经被删除的远程分支gitfetch-p 或者 gitremotepruneoriginUpdate:信息更新修改当前分支名gitbranch-m<new-branch-name> 或者 gitbranch-m[<old-branch-name>]<new-branch-name>rchive:打包将Master分支打包gitarchivemaster--format=zip--output=master.zip将历史记录包括分支内容打包到一个文件中gitbundlecreate<file><branch-name>从某个Bundle中导入gitclonerepo.bundle<repo-dir>-b<branch-name>Merge:合并Pull&Push:远程分支合并操作用pull覆盖本地内容gitfetch--all&&gitreset--hardorigin/master根据Pull的ID拉取某个Pull请求到本地分支gitfetchoriginpull/<id>/head:<branch-name>或者gitpulloriginpull/<id>/head:<branch-name>Rebase:变基在Pull时候强制用变基进行操作gitconfig--globalbranch.autosetuprebasealways将某个feature分支变基到master,然后合并进mastergitcheckoutfeature&&gitrebase@{-1}&&gitcheckout@{-2}&&gitmerge@{-1}变基之前自动Stash所有改变gitrebase--autostash利用变基自动将fixup提交与正常提交合并gitrebase-i--autosquash利用ReBase将前两个提交合并gitrebase--interactiveHEAD~2Diff&Conflict:差异与冲突Info:信息查看列举全部的冲突文件gitdiff--name-only--diff-filter=U在编辑器中打开所有冲突文件gitdiff--name-only|uniq|xargs$EDITORWorkflow:工作流SubModules:子模块Info:信息查看Manipulation:操作利用SubTree方式将某个Project添加到Repo中gitsubtreeadd--prefix=<directory_name>/<project_name>--squashgit@github.com:<username>/<project_name>.gitmaster更新所有的子模块gitsubmoduleforeachgitpullWorkTreeManipulation:操作从某个仓库中创建一个新的WorkingTreegitworktreeadd-b<branch-name><path><start-point>从HEAD状态中创建一个新的WorkingTreegitworktreeadd--detach<path>HEAD

© 一点知识