git入门教程(小白必看)

git概念大全:

工作区: 在哪个目录下使用init命令哪个目录就是工作区,是用来存放你想要git帮你进行版本管理的文件用的。

版本库: 工作区中的.git隐藏目录。这里面放了Git进行版本管理所需的一系列文件,比如一些配置信息等。

暂存区: 就是add 文件名之后,暂时存放这些文件的区域。

本地库(暂时也认为是分支): commit命令执行后,暂存区中的文件全部进入这个本地库(分支默认是master分支)。

主分支: Git中主分支就叫做mastermasterhead都相当于是一个指针,master指向最新的提交,而head指向master,所以,head指向的就是当前分支,例如head指向主分支则当前分支为主分支,指向XX分支,则当前分支为XX分支。一般开发项目时master分支不进行开发,只是用来发布新版本,开发工作都在dev分支上进行。

分支: 通过branch命令创建的分支。

合并方式:Fast-forward信息,Fast-forward是合并分支的模式,它的意思就是直接把当前分支指向要合并的分支的当前提交,但是这种方式在合并完删除分支后会丢失分支信息,且fast forward合并模式看不出来曾经做过合并,而加--no-ff参数的是用普通模式合并,合并后的历史有分支,能看出来曾经做过合并。

工作流介绍

简单来说就是 master 主分支是真正用来上线产品的,进行开发工作会在develop分支上。然后在实际工作中会有很多人(或者部门)一起进行开发,那么就会从develop分支上开辟出新的分支,在新的分支上完成各自的开发工作,完成后会合并到develop分支上。develop开发分支的工作完成后,在合并到主分支之前会先开辟出测试分支进行测试,如果出现bug就会在测试分支上解决bug然后与develop分支和主分支(master,因为当前分支就是没有bug的develop分支了)进行合并。只有develop分支下所有的开发分支的开发工作都完成以后并且develop分支的测试分支(release)没有bug之后才会一起合并到主分支。如果 master主分支出现问题,会创建一个 hotfix 分支进行解决 bug ,解决完后合并到 master 分支和 develop 分支,保持一个同步。

只有develop开发分支才会开辟出测试分支进行测试,并且这个测试分支在完成其测试工作后,会同步的合并到develop开发分支和master主分支上。主分支如果出现错误,那么会开辟补丁(hotfix)分支,并且补丁分支完成工作后,也会同步到develop开发分支和master主分支上。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1159o9u1-1665285320348)(C:\Users\Xujx\AppData\Roaming\Typora\typora-user-images\image-20221009104025637.png)]

git命令大全:

git命令默认都有前缀git

config命令

config命令是用来配置git的相关配置信息的,可以给其加上–global参数,表示你这台机器上所有的Git仓库都会使用这个配置。

$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

init命令

init命令是用来将当前所在目录变为Git可以管理的仓库。被Git管理的目录都有一个特点就是目录下有一个.git的隐藏文件。

log命令

log命令可以查看提交日志。可以给其加上–pretty=oneline参数,使其简略打印历史信息。下面显示的如1094adb...的是commit id(版本号),和SVN不一样,Git的commit id不是1,2,3……递增的数字,而是一个SHA1计算出来的一个非常大的数字,用十六进制表示。因为Git是分布式的版本控制系统,是多人在同一个版本库里工作,如果大家都用1,2,3……作为版本号,那肯定就冲突了,所以git自己创建每次提交的版本号。

每提交一个新版本,实际上Git就会把它们自动串成一条时间线。

$ git log --pretty=oneline
1094adb7b9b3807259d8cb349e7df1d4d6477073 (HEAD -> master) append GPL
e475afc93c209a690c39c13a46716e8fa000c366 add distributed
eaadf4e385e865d25c48e7ca9c8395c3f7dfaef0 wrote a readme file

加上--graph参数可以看到分支合并图。

add命令

add命令是将后面跟的文件添加到暂存库中。

commit命令

commit命令是将暂存库中的文件添加到本地库中。注意上面init创建的仓库和暂存库,本地库都不是一个概念,init创建的仓库只是说把一个目录变成Git可以管理的目录,这个目录称之为工作区,这个目录下的.git隐藏文件是版本库。一般都需要给commit命令添加 -m参数,表示添加本次提交的说明

$ git commit -m "wrote a readme file"

reset命令

reset命令可以回退版本,其后加上要回退的版本号即可。使用版本号回退版本时可以只输入版本号的前几位,Git会自动匹配。在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...,上一个版本就是HEAD^,上上一个版本就是HEAD^^,回退版本比较多时可以写成HEAD~n

$ git reset --hard HEAD^

reflog命令

reflog命令可以用来查询你之前使用的每一个命令即命令历史记录。

diff命令

即difference不同,diff命令可以查看工作区和版本库里面最新版本的区别。可以指定文件

$ git diff HEAD -- readme.txt

status命令

status命令可以当前分支上你进行的修改工作区文件中的状态。

restore命令

restore命令可以撤销你在此之前对工作区中文件的修改。

$ git restore readme.txt

上面的命令意思就是把readme.txt文件在工作区的修改全部撤销,前提是没有添加到暂存区,撤销修改就回到和版本库中最后一次提交时一模一样的状态。

git restore --staged readme.txt

这种是已经添加到暂存区之后又作了修改,现在,撤销修改就回到添加到暂存区后的状态。

git reset --hard HEAD^

这种是已经提交到了版本库中的情况。执行之后可保证工作区,暂存区,版本库都是上个版本的内容

总之,就是让这个文件回到最近一次git commitgit add时的状态。

checkout命令

这个命令有两种用法

1.git checkout [branch] 进行分支的切换,这种用法可以加上-b参数表示创建并切换到[branch]的分支

2.git checkout – [文件] 用于将本地工作区的内容和当前最新版本库保持同步;(也即可以实现前面老师说的误删)

rm命令

rm命令用于删除文件

git rm test.txt 

相当于是删除工作目录中的test.txt文件,并把此次删除操作添加·到了暂存区,即git rm =先手动删除文件,然后使用git add

remote命令

此命令是与GitHub上的远程库相关的命令,有很多种用法。

$ git remote add origin(链接的远程库的名字,即后面那个远程库在本地库中的代号) git@github.com:GitHub账户名/GitHub中的仓库名.git
$ git remote rm <name>是用来删除本地库与远程库之间的链接的,这里的name是GitHub中远程库在版本库中的名字
remote 是用来查看远程库信息的加-v参数可以显示更详细的信息
$ git remote -v
origin  git@github.com:michaelliao/learngit.git (fetch)
origin  git@github.com:michaelliao/learngit.git (push)

上面显示了可以抓取和推送的origin的地址。如果没有推送权限,就看不到push的地址。

push命令

push命令是将当前本地库中当前分支master的内容推送到远程库中。

-u参数是用来在第一次推送master分支时不但把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。本地分支和远程库分支推送抓取都需要把两个分支连接起来

origin是要推送的远程库名字,master是要推送的分支名字

$ git push -u origin master

clone命令

$ git clone git@github.com:GitHub账户名/GitHub中的仓库名.git

克隆下来的远程库默认情况下只能看到master分支即主分支。

想要别的分支需要创建,如要在远程库的dev上开发就需要创建远程库的dev分支到本地

$ git checkout -b dev origin/dev

branch命令

$ git branch

列出所有分支,当前分支前面会标一个*号。

加上-d参数表示删除某分支。-D表示强行删除(包括修改内容以提交但未合并的分支)

后面跟分支名表示创建对应分支。

下面的是连接本地库分支和远程库分支所用的。

--set-upstream-to=origin/dev dev

merge命令

merge命令用于合并指定分支到当前分支

$ git merge 【要合并的分支名】

–no-ff参数表示禁用Fast forward这种合并模式,禁用这种模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。因为禁用后相当于commit提交一次,所以需要添加说明信息,所以需要加上-m参数

$ git merge --no-ff -m "merge with no-ff" 【分支名】

switch命令

更推荐使用switch命令来切换分支。

直接切换到已有的master分支,可以使用:

$ git switch master

加上-c参数表示创建分支并切换

$ git switch -c dev

stash命令

stash命令可以把当前的工作区中还没有添加或者提交的数据“储藏”起来,等以后恢复现场后继续工作。这个命令常用于修复bug时保存临时工作的文件修改数据。

$ git stash
$ git stash list这个命令用于查看保存的工作数据
git stash apply这个命令用于恢复stash数据,但是恢复后,stash内容并不删除,需要用git stash drop来删除。
git stash pop这个命令可以在恢复的同时把stash内容也删了。

上面两个恢复命令都可以指定stash

$ git stash apply stash@{0}

cherry-pick命令

这个命令可以复制一次提交所修改的内容到当前分支上

$ git cherry-pick 4c805e2(commitid)

tag命令

单打一个tag命令可以查看所有标签

$ git tag

加上name属性会默认在最新提交的commit上打一个标签

$ git tag v1.0

还可以加上commit id,意思是在指定的commit上打标签

$ git tag v0.9 f52c633

还可以创建带有说明的标签,用-a指定标签名,-m指定说明文字:

$ git tag -a v0.1 -m "version 0.1 released" 1094adb

PS:标签不是按时间顺序列出,而是按字母排序的。可以用git show <tagname>查看指定标签名的标签详细信息

$ git show v0.9

加上-d参数可以删除指定标签名的标签

$ git tag -d v0.1

因为创建的标签在不主动推送的情况下都是存储在本地的,所以在本地可以随便安全的删除。

但是推送到远程库的标签想要删除就需要把本地和远程库的标签一起删除掉。

先从本地删除

$ git tag -d v0.9

然后从远程删除,删除命令也是push,但是格式如下:

$ git push origin :refs/tags/v0.9

可以使用push命令推送指定标签名的标签

$ git push origin v1.0

如果要推送的标签很多,也可以一次性把本地中还没有推送到远程库中的标签全部推送到远程库。

$ git push origin --tags

感谢耐心看到这里的同学,觉得文章对您有帮助的话希望同学们不要吝啬您手中的赞,动动您智慧的小手,您的认可就是我创作的动力!
之后还会勤更自己的学习笔记,感兴趣的朋友们点点关注哦。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值