当前位置: 首页 > 后端技术 > Node.js

31Git实战技巧

时间:2023-04-03 14:16:10 Node.js

本文适合作为快速参考手册使用。想进一步了解git的同学,请到ProGit中文版下载《Pro Git》手册进行学习。Cherish作为一个菜鸟程序员,在刚开始接触git的时候,虽然仔细阅读了《Pro Git》的第一、二章,但是基本了解了git的使用过程。但是在实际使用中,经常会因为记不住各种常用的git命令而感到畏惧。错误的git命令让工作变得一团糟,因为各种git命令我都不记得了,使用的时候经常要临时翻看手册。历尽千辛万苦,下定决心对常用的git技巧做一个简明扼要的总结下面是我结合参考资料和日常使用总结的31个git实用技巧。随着工作中使用场景的丰富,新的技能会不断增加,不断丰富和完善。一、基本操作1、如何新建仓库?1.1.将本地没有进行版本控制的目录转换成Git仓库,进入项目的目录;$cd/c/user/my_project执行gitinit;$gitinit使用gitadd来跟踪现有的项目文件;$gitadd*.c使用gitcommit进行初始提交;$gitcommit-m'initialprojectversion'//提交时添加注释现在,您已经拥有一个包含跟踪文件和初始提交的Git存储库。1.2从其他服务器克隆一个已经存在的Git仓库克隆命令:gitclone$gitclonehttps://github.com/libgit2/libgit2克隆远程仓库时如果想自定义本地仓库的名称,可以使用附加参数指定新目录名称:$gitclonehttps://github.com/libgit2/libgit2myNameGit支持多种数据传输协议。上面的例子使用了https://协议,但是你也可以使用git://协议或者使用SSH传输协议,比如user@server:path/to/repo.git。2、如何查看当前项目中文件的状态?你可以使用gitstatus命令来查看哪些文件处于什么状态(状态信息更详细)$gitstatusOnbranchmaster你的分支是最新的'origin/master'。nothingtocommit,workingdirectoryclean使用gitstatus-s命令或者gitstatus--short命令(状态信息比较简洁)$gitstatus-s最具体的查看方式:gitdiff,可以具体更改文本内容$gitdiff3.如何跟踪新添加的文件?gitaddfilename$gitaddxxxfile4.如何暂存修改过的文件?或者gitaddfilename命令,这是一个多功能命令$gitaddxxxfile5.如何忽略某些不需要纳入git管理的文件?创建一个.gitignore;$cat.gitignore在此文件中添加需要忽略的文件;*.[oa]//忽略所有以.o或.a结尾的文件*~//忽略所有以波浪号(~)结尾的文件.gitignore文件末尾的文件格式规范如下:?Git将忽略所有空行或以#开头的行。?您可以使用标准的glob模式匹配,它递归地应用于整个工作区。?匹配模式可以以(/)开头以防止递归。?匹配模式可以指定以(/)结尾的目录。?要忽略指定模式之外的文件或目录,您可以用感叹号(!)反转模式。查看已经暂存的内容,下次提交时会加入$gitdiff--staged6。如何提交更新使用gitstatus查看文件状态,看是否有没有暂存的文件;$gitstatus使用gitcommit提交更新$gitcommit可以在commit命令后加上-m选项将提交信息与命令放在同一行,无需打开编辑器编辑提交信息$gitcommit-m《Story182:Fixbenchmarksforspeed》文件改了,2个插入(+)createmode100644README>提交后,会告诉你当前提交的是哪个分支(master),这次提交的完整SHA-1校验和是多少(463dc4f),而在这次提交中,有修改了多少文件,增删了多少行>记得commit的时候记录了一个snapshot,放在stagingarea。任何未暂存的文件都保持修改状态,并且可以在下一次提交时包含在版本管理中。7、如何跳过暂存步骤,直接将所有跟踪修改的文件提交给带-a选项的gitcommit,Git会自动存储所有跟踪文件并一起提交,从而跳过git添加步骤$gitcommit-a-m'添加了新的基准测试'8.如何从版本管理中排除git版本管理中包含的文件要从Git中删除一个文件,必须将其从跟踪文件列表中删除,然后使用gitrm命令提交此工作并删除指定的工作目录中的文件。$gitrmPROJECTS.mdrm'PROJECTS.md'$gitstatusOnbranchmaster你的分支是最新的'origin/master'。要提交的更改:(使用“gitresetHEAD...”取消暂存)已删除:PROJECTS.md9。如何查看提交历史?gitlog命令$gitlogcommitca82a6dff817ec66f44342007202690a93763949作者:ScottChacon日期:2008年3月17日星期一21:52:11-0700更改了版本号10。如何撤销对文件的修改?如果不想保留文件的修改怎么办?您如何轻松撤消更改——将其恢复为上次提交的方式?gitcheckout--filename$gitcheckout--filename请记住gitcheckout--是一个危险的命令。您在本地对该文件所做的任何更改都将消失——Git将用最近的提交覆盖它。2.分行管理11.如何创建新的分行?使用gitbranch命令根据当前分支创建新分支$gitbranch分支名12、如何切换分支?使用gitcheckoutbranchname命令切换到一个已有的分支$gitcheckoutbranchname通常我们在创建一个新的分支后会立即切换到过去,这可以通过一个命令gitcheckout-b来完成;13.如何查看Branchfork历史?使用gitlog命令14.新建一个分支并切换到该分支$gitcheckout-bbranchA这条语句是下面两句的简写:$gitbranchbranchA$gitcheckoutbranchA15.合并目标分支(merge将目标分支合并到当前分支上)gitmergetargetbranch将目标分支合并到当前分支$gitcheckoutmaster//切到master$gitmergehotfix//将hotfix合并到master16.如何删除不需要的分支?使用gitbranch-d分支名$gitbranch-dhotfixDeletedbranchhotfix(3a0874c)17.合并分支时遇到冲突怎么办?现象:$gitmergeiss53Auto-mergingindex.htmlCONFLICT(content):Mergeconflictinindex.htmlAutomaticmergefailed;修复冲突然后提交结果。此时Git进行了合并,但并没有自动创建新的合并提交。Git会暂停,等待你解决合并冲突。任何包含等待解决的合并冲突的文件都将被标记为未合并。Git会为冲突文件添加标准的冲突解决标记,以便您可以打开冲突文件并手动解决冲突。<<<<<<联系方式:email.support@github.com

=======请联系我们在support@github.com
>>>>>>>iss53:index.html为了解决冲突,你必须选择使用=======分隔的两个部分之一,或者你也可以自己组合这些。上面的冲突解决方案只保留了其中一个分支的更改,<<<<<<<、=======和>>>>>>>行被完全删除。解决所有文件中的冲突后,对每个文件使用gitadd命令将其标记为冲突已解决。一旦暂存了这些原本存在冲突的文件,Git会将它们标记为冲突已解决。如果你想使用图形化的工具来解决冲突,你可以运行gitmergetool,它会为你启动一个合适的可视化合并工具,并引导你一步一步地解决这些冲突。18.如何使用gitbranch命令?gitbranch命令不仅仅是创建和删除分支。如果您不带任何参数运行它,您将获得所有当前分支的列表;$gitbranchmaster//*代表当前指针位置测试gitbranch-v查看每个分支的最后一次提交;$gitbranch-vmaster7a98805Mergebranch'iss53'testing782fd34在自述文件中将scott添加到作者列表中gitbranch--merged检查哪些分支已经合并到当前分支;$gitbranch--mergedmaster3.远程仓库19.如何查看远程仓库?如果想查看自己配置的远程仓库服务器,可以运行gitremote命令。如果你已经克隆了自己的仓库,你至少应该能够看到origin——这是Git给你克隆的仓库服务器的默认名称;$gitremoteorigin如果你有多个远程仓库,这个命令会列出所有;20.如何添加远程仓库?运行gitremoteadd添加一个新的远程Git存储库,指定一个方便的缩写;$gitremoteorigin$gitremoteaddpbhttps://github.com/paulboone/ticgit$gitremote-voriginhttps://github.com/schacon/ticgit(获取)originhttps://github.com/schacon/ticgit(push)pbhttps://github.com/paulboone/ticgit(fetch)pbhttps://github.com/paulboone/ticgit(push)21。如何从远程仓库抓取(fetch)和拉取(pull)?从远程仓库获取数据,可以执行gitfetch;$gitfetchthis该命令将访问远程存储库并从中提取您还没有的任何数据。执行完成后,您将拥有对该远程存储库中所有分支的引用,可以随时合并或查看。请务必注意,gitfetch命令只会将数据下载到您的本地存储库——它不会自动合并或修改您当前的工作。准备就绪后,您必须使用gitpull命令手动将其合并到您的工作中,以自动获取远程分支并将其合并到当前分支$gitpull22。如何推送到远程仓库?使用gitpush$gitpushoriginxxxbranch23.如何查看远程仓库的信息?使用gitremoteshow命令;远程originFetchURL:https://github.com/schacon/ti...PushURL:https://github.com/schacon/ti...HEAD分支:masterRemote分支:mastertrackeddev-branchtrackedLocal分支配置为'gitpull':mastermergeswithremotemasterLocalrefconfiguredfor'gitpush':masterpushestomaster(uptodate)>它还会列出远程仓库的URL和跟踪分支的信息。这个信息非常有用,它告诉你你在master分支上,如果你运行gitpull,它会抓取所有远程引用,然后将远程master分支合并到本地master分支。它还会列出所有使用gitremoteremove或gitremoterm拉取的远程引用4.远程分支25.如何操作远程分支?使用gitls-remote显示远程引用的完整列表使用gitremoteshow获取远程分支的更多信息##27.如何配置编辑评论时使用的编辑器?要启动的编辑器由shell环境变量EDITOR指定,通常是vim或emacs。当然,您也可以使用gitconfig--globalcore.editor命令来设置您喜欢的编辑器,如入门指南中所述。26.什么是trackingremotebranch?从远程分支签出的本地分支称为跟踪分支。跟踪分支是与远程分支直接相关的本地分支。在跟踪分支中输入gitpush,Git会推断应该向哪个服务器的哪个分支推送数据。同样,在这些分支上运行gitpull会获取所有远程索引并将它们的数据合并到本地分支中。27、如何自定义跟踪分支?使用gitcheckout-b[branch][remotename]/[branch]$gitcheckout-b[branch][remotename]/[branch]//从远程分支上的分支branch拉出一个名为branch的本地分支if来设置将本地分支和远程分支命名为不同的名称,可以使用以下示例命令:$gitcheckout-bsforigin/serverfixBranchsfsetuptotrackremotebranchserverfixfromorigin.Switchedtoanewbranchabove'sf',local分支sf自动从origin/serverfix拉取。这是一个很常见的操作,所以Git提供了一个--track的快捷方式。自定义拉出远程分支的快捷方式:gitcheckout--trackorigin/serverfix$gitcheckout--trackorigin/serverfixBranchserverfixsetuptotrackremotebranchserverfixfromorigin.Switchedtoanewbranch'serverfix'28.如何设置本地分支跟踪一些远程分支?使用gitbranch-uorigin/serverfix或gitbranch--set-upstream-toorigin/serverfix设置本地分支跟踪远程分支,或者修改被跟踪的远程分支$gitbranch-uorigin/serverfixBranchserverfixsetup从源跟踪远程分支serverfix。29、如何查看所有设置的跟踪分支?使用gitbranch-vv命令,这将列出所有本地分支$gitbranch-vviss537e424c3[origin/iss53:ahead2]忘记了括号serverfixf8674d9[teamone/server-fix-good:ahead3,behind1]这应该做ittesting5ea463atryingsomethingnew>在这里你可以看到iss53分支正在跟踪origin/iss53并且`ahead''是2,这意味着有两个本地提交还没有被推送到服务器。您还可以看到`master分支正在跟踪origin/master分支并且是最新的。接下来可以看到serverfix分支在teamone服务器上跟踪server-fix-good分支,领先2落后1,也就是说服务器上有1个commit没有被合并进去,3个commit尚未在本地推送的。最后看到测试分支没有跟踪任何远程分支。30.如何计算最新的领先和落后数字?使用命令gitfetch--all;git分支-vv31.如何删除远程分支?使用带有--delete选项的gitpush命令删除远程分支;$gitpushorigin--deleteserverfix到https://github.com/schacon/simplegit-[删除]serverfix继续更新。..