当前位置: 首页 > 科技观察

七分钟,带例子带你了解工作中常用的Git命令

时间:2023-03-16 15:26:56 科技观察

Git本质上可以记录文本的变化,但它的定义是一个版本控制系统。您可能已经以某种方式使用git:由于其分布式特性,它是代码版本控制的实际标准,而不是集中式ApacheSubversion(SVN)。安装git要检查Git是否已安装,请在终端中运行:$gitversiongitversion2.27.0.rc1.windows.1如果未安装,请按照https://git-scm.com/downloads上的说明进行操作。Mac用户可以使用brew安装它:brewinstallgit。配置git我们只需要配置一些东西gitconfig--globaluser.name"Front-endXiaozhi"&#yournamegitconfig--globaluser.emailjohndoe@example.com&&#youremailgitconfig--globalinit.defaultbranchmain#Defaultbranchname,withgithub兼容可以使用如下命令查看当前全局配置gitconfig--global--list#Type":q"toclosegit以明文方式存储配置,如果想直接修改可以直接在里面修改~/.gitconfig或~/.config编辑/git/config中的全局配置。正如命令所建议的那样,删除--global会使命令的范围限定为当前文件夹。但要对此进行测试,我们需要一个存储库。创建新存储库存储库只是一个文件夹,其中包含我们要跟踪的所有内容。由命令创建:mkdirgitexample&&cdgitexample&&gitinit#gitexamplegit:(main)该命令在gitexample文件夹中创建一个.git文件夹。这个隐藏的.git文件夹是存储库:所有本地配置和修改都存储在这里。更改在存储库中创建一些内容:echo"Hello,Git">>hello.txt运行gitstatus我们将看到新创建的未跟踪文件。gitstatus#Onbranchmain##Nocommitsyet##Untrackedfiles:#(use"gitadd..."toincludeinwhatwillbecommitted)#hello.txt##nothingaddedtocommitbutuntrackedfilespresent(use"gitadd"totrack)根据提示建议,我们添加文件:gitaddd。如果我们不希望所有文件都添加可以使用。gitaddhello.txt如果您现在检查存储库的状态,您会看到该文件已添加(也称为暂存),但尚未提交。gitstatus#Onbranchmain##Nocommitsyet##Changestobecommitted:#(use"gitrm--cached..."tounstage)#newfile:hello.txt要记录这些更改,让我们提交它。gitcommit-m"Addhello.txt"#[main(root-commit)a07ee27]Addshello.txt#1filechanged,2insertions(+)#createmode100644hello.txtgitcommit-m是一个简短的命令,你可以用gitcommit(主要是vim),提供详细的提交描述。检查提交日志:gitlog#Author:qq449245884<44924566884@qq.com>#Date:SatJul1714:57:242021+0800##Addhello.txt#Creatingabranch在很多情况下,有一个独立的初始版本是有用的code:例如,在测试您不确定的功能时,或者在一起工作时避免代码冲突。这正是git分支的意义所在:它从历史上的特定点开始增长。要创建分支,运行gitbranchNAME,要切换分支,运行gitcheckoutNAME。或者简单地:gitcheckout-bdev#Switchtoanewbranchcalled'dev'#Switchedtoanewbranch'dev'#gitexamplegit:(dev)我们更改Hello.txt文件中的内容并提交更改:echo"\nHello,GitBranch">>hello.txt&&gitcommit-am"Changehello.txt"现在,切换到主分支:gitcheckoutmain&&cathello.txt#Switchedtobranch'main'#Hello,Git可以看到,文件内容还是和之前一样。要比较分支,我们可以运行.gitdiffdev#diff--gita/hello.txtb/hello.txt#index360c923..b7aec52100644#---a/hello.txt#+++b/hello.txt#@@-1,3+1@@#Hello,Git#-#-Hello,GitBranch#(END)#type":q"toclose我们在主分支中进行更改:echo"\nHifromMainBranch">>hello.txt&&gitcommit-am"Changehello.txtfrommain"#[main9b60c4b]Changehello.txtfrommain#1filechanged,2insertions(+)现在让我们尝试合并更改。gitmergedev#Auto-merginghello.txt#CONFLICT(内容):Mergeconflictinhello.txt#Automaticmergefailed;解决冲突,然后提交结果。因为文件在同一个地方被修改了两次,所以我们发生了冲突。看一下这个文件:cathello.txt<<<<<<>>>>>>dev还有一个单独查看变化的命令:gitdiff--ours#:qtoclosegitdiff--theirs#:qtoclose您可以手动编辑文件并提交更改,但假设我们只需要一个版本。我们从中止合并开始。gitmerge--abort并重新启动与“他们的”策略的合并,这意味着在发生冲突时,我们将使用传入分支坚持的内容。gitmerge-Xtheirsdev#Auto-merginghello.txt#Mergemadebythe'recursive'strategy.#hello.txt|5+----#1filechanged,1insertion(+),4deletions(-)这个策略的反面是“我们的”。将这两个更改合并在一起需要手动编辑(或使用gitmergetool)。要查看所有分支的列表,请运行gitbranch#type:qtoclose#dev#*main最后,要删除分支,请运行:gitbranch-ddev#Deletedbranchdev(was6259828)。重置分支分支从git中的某个点“增长”history,rebase允许改变这一点。让我们创建另一个分支并对hello.txt添加一些更改。gitcheckout-bstory&&echo"Onceuponatimetherewasafile">>story.txt&&gitaddstory.txt&&gitcommit-m"Addstory.txt"#Switchedtoanewbranch'story'#[storyeb996b8]Addstory.txt#1filechanged,1insertion(+)#createmode100644story.txt复制代码现在,我们回到主分支并添加更改:gitcheckoutmain&&echo"Otherchanges">>changes.txt&&gitaddchanges.txt&&gitcommit-m"Addchanges.txt"将我们在主分支中所做的更改重置为故事分支:gitcheckoutstory&&gitrebasemain#Successfullyrebasedandupdatedrefs/heads/story.可以看到主分支中创建的新文件被添加到story分支中。ls#changes.txtthello.txtstory.txt注意:不要变基其他人可能使用过的分支,例如主分支。另外,请记住,远程存储库上的每个历史操作都需要强制这些更改生效。远程存储库如果您还没有,请创建一个GitHub帐户,登录并创建一个新的空存储库(私有或公共)。假设存储库名称是“example”,运行以下命令(更改为您的用户名)。gitremoteaddoriginit@github.com:USERNAME/example.git&&gitpush-uoriginmain刷新页面就可以看到master分支的文件了。要将所有本地分支推送到远程存储库,请运行.gitpush--allorigin我们在GitHub上编辑一些东西:只需单击任何文件和铅笔图标。添加一行您想要的任何文本,然后按“提交更改”。在本地运行此命令以获取远程更改。gitcheckoutmain&&gitpull管理未提交的更改如果你想保存本地更改供以后使用,你可以使用gitstash。echo"Changes">>hello.txt&&gitstash现在您可以使用以下命令来检查、应用或放弃这些更改。gitstashlist#stash@{0}:WIPonmain:92354c8Updatechanges.txtgitstashpop#Applychangesgitstashdrop#Undochanges您可以使用存储号,即gitstashpop0应用特定存储库,或gitstashdrop0撤销。如果您想放弃所有本地更改并仅将存储库恢复为上次提交的更改,请运行.gitrestore。管理提交更改创建提交后,更改将保存在本地的git历史记录中。如前所述,所有影响远程历史的修改都需要gitpush--force。对于以下所有命令,请记住这一点。我们从编辑最后一条提交消息开始。gitcommit--amend#type:wqtosaveandclose#Press"i"进行编辑,"Esc"停止编辑我们将所有内容重置为开头怎么样?要查找第一个提交的ID,请运行此命令并滚动(向下箭头)到末尾。gitlog--abbrev-commit#commita07ee27#Author:YourNameDate:SunJul1111:47:162021+0200Addshello.txt(END)#type":q"toclose现在运行这个来重置存储库,但保留所有修改未缓存。gitreset--softCOMMIT#e.g.a07ee27相反,您也可以执行硬重置,使用gitreset--hardCOMMIT删除所有更改。还有其他几种重置方法,您可以从git文档中了解这些方法。别名大多数时候,您只需要使用少数几个命令(主要是检出、添加、提交、拉取、推送和合并),但有些命令您可能需要“以防万一”。存储此信息的一种方法是git别名。要配置别名,只需在配置中设置即可。例如,我经常使用的一个别名是gittree,它以树的形式打印出一个很好的历史日志。gitconfig--globalalias.tree'log--graph--decorate--pretty=oneline--abbrev-commit'#Tryitwith`gittree`另一个有用的别名是删除所有合并的分支。gitconfig--globalalias.clbr'!gitbranch--merged|grep-v\*|xargsgitbranch-D'正如你所看到的,它以“!”为前缀,这允许我们使用任何命令,而不仅仅是git命令。作者:Valeria译者:前端小智来源:dev原文:https://dev.to/valeriavg/master-git-in-7-minutes-gai