以下是我实际学习过程中使用到的命令,手码不易,如果觉得好,希望可以点赞收藏;
git是一种分布式版本控制工具,客户端不仅要检出文件的最新快照,而且对代码仓库进行完整的镜像,相比于svn需要配置服务器,每次都是往服务器上添加或者下拉操作,如果svn的服务器宕机了,你就无法提交或者下拉,并且中央数据库所在的硬盘受损的话,就GAME OVER了,除了代码没了,而且各种操作记录都无了。但是GIT不会,你下拉到本地的代码,即使远程git服务器,任何一个客户端都可以使用自己的本地镜像来恢复服务器,因为他每一次的检出操作实际上都是对数据的一次完整备份,这才是分布式版本控制工具最屌的,也就是常说的高可用。通过GIT官网downloads就可以下载对应系统(mac、windows、linux/unix)的安装包,然后进行安装。
在git中,文件有三种状态,分别为:已提交(commited)、已修改(modified)和已暂存(staged),
git可以全局配置,全局配置需要加上–global,也可以局部配置
添加global就是查看全局,否则就是看当前git项目的配置(因为可能对应多个git远程分支,提代码的用户名密码都不一定都相同)
#1.查看<全局>所有配置
git config <--global> --list
#git config --global --list
#user.username=xxxx
#[email protected]
#user.name=desktop_xxxx
#credential.https://gitee.com.provider=generic
#2.查看配置的key,比如user.username|user.password等
git config <--global> key
#git config --global user.username
#[email protected]
git配置设置,可以设置config中key对应的value
#设置配置的key为value,git config user.username potato 就是将当前username设置为potato
git config <--global> key value
#git config --global user.name potato
#配置git默认编辑器为nodepad++
#git config <--global> core.editor "编辑器地址比如nodepad++" -multiInst
git可以通过三种方式获取帮助
git help <verb>
git <verb> --help
man git-<verb>
#git help config/clone/push 输入就会显示config或者clone或者push相关的帮助页面说明文档了
建立GIT项目有两种方式:一种是把现有的项目或者目录导入到git中,第二种是从服务器上克隆(也是经常用的git clone)现有的git仓库。
在现有的目录中初始化git仓库
#初始化,会在当前文件夹下面创建.git的子目录,里面包含了构成GIT仓库骨架的所有必须文件。
git init
#git init
#Initialized empty Git repository in D:/code/java_code/gittest/.git/
#添加文件到暂存区,跟踪新文件
git add xxx.xxx
#将暂存区文件提交到本地仓库,-m为给这次提交添加备注
git commit -m 'first commit'
克隆现有仓库
#从gitAddress处克隆项目
git clone gitAddress
查看当前分支状态,最常用的命令
git status
git status -s 或者 git status --short
#对应状态有以下三种:
#Changes not staged for commit:已修改但是未添加到暂存区
#Changes to be committed:修改的文件已添加到暂存区,但是没有提交
#nothing to commit, working tree clean项目目录是干净的,也就是没有任何变更
将xxx文件添加到暂存区,也就是将这个文件让GIT开始跟踪
git add xxx
查看已暂存和未暂存的变更
#多用于修改了但未add操作
git diff
#查看将暂存的马上与上一次的做对比,用于add了,但是未commit
git diff --staged
提交变更,将加入到暂存区的文件提交到本地仓库
#提交变更,备注为xxxx
git commit -m 'xxxx'
#直接跳过add,自动把已跟踪(执行过git add)的所有文件添加到暂存区,然后再提交,但是这个慎用
git commit -a -m 'xxxx'
相当于git add的回退操作,并且该命令还会把文件从工作目录中一处,这样下一次你就不用在未追踪文件列表中看到这些文件了
如果直接把文件从工作目录中删除,会有Changes not staged for commit:,这个时候需要使用移除文件的命令,将文件的移除状态记录到暂存区
如果你更改了某个文件,并且已经加入到暂存区了,想要让GIT移除它就必须使用-f强制移除,这样做的目的是防止没有被记录到快照中的数据被意外移除而设立的按全特性,因为这样的数据被意外移除后无法由GIT恢复。
#用于没有添加到暂存区,但是工作目录是删除了的文件,从GIT中移除该文件
git rm xxx
#用于已添加到暂存区了,想要让GIT移除它就必须要强制移除
git rm -f xxx
#用于本地不删除,但是想让GIT不追踪,多用于本地配置文件,或者本地编译的文件,比如使用git rm -cached log/\*.log将日志哪个
git rm -cached xxx
git不会显示跟踪文件的移动,可以通过git mv来重命名文件,相当于
1.mv file_from file_to
2.git rm file_from
3.git add file_to
#将file_from文件重命名为file_to
git status file_from file_to
#git status
#On branch master
#Changes to be committed:
#(use "git restore --staged ..." to unstage)
#renamed: test.txt -> test2.txt
很基础但是却很强大的命令,可以看历史的提交记录,可以说就是避锅找锅的必备了,你干了好事或者坏事,统统给你记录下来,想跑都跑不了的。可以看到我进行了两次提交的操作并且每次提交的-m备注都会显示出来,默认不加参数的话,git log会按照时间顺序列出仓库中的所有提交,其中最新的在最前面。
git log
#Author: potato
#Date: Wed Mar 1 15:28:43 2023 +0800
#
# second commit
#
#commit 403a86106b79cf76f55b6b3693d2b4e0aef81b4f
#Author: potato
#Date: Wed Mar 1 11:43:23 2023 +0800
#
# first commit
-p选项最常用,他会显示每次提交所引入的差异,后面加-num数字可以最近的两次提交,比如git log -p -2查看最近两次提交变更的内容
git log -p <-num>
–stat 用来查看简要的信息,比如改动的文件列表、共有多少文件被改动以及文件里由多少新增行或者删除行,并且最后输出总计信息
git log --stat
–pretty可以更改日志输出的默认格式,比如浏览大量提交时,参数可以设置以下几种:
oneline格式选项很有用,它可以在每一行中显示一个提交,short、full和fuller格式选项会分别比默认输出减少或者增加一些信息
git log --pretty=oneline
git log --pretty=format:"%h - %an, %ar : %s"
format格式选项如下:
格式选项 | 输出的格式描述 |
---|---|
%H | 提交对象的散列值 |
%h | 提交对象的简短散列值 |
%T | 树对象的散列值 |
%t | 树对象的简短散列值 |
%P | 父对象的散列值 |
%p | 父对象的简短散列值 |
%an | 作者的名字 |
%ae | 作者的电子邮箱地址 |
%ad | 创作日期(可使用-date=选项指定日期格式) |
%ar | 相对于当前日期的创作日期 |
%cn | 提交者的名字 |
%ce | 提交者的提交者的电子邮箱地址 |
%cd | 提交日期 |
%cr | 相对于当前日期的提交日期 |
oneline和format这两个选项如果与log命令的另外一个选项–grap一起使用,就能够发挥更大的作用
#列举出最近两周内的所有提交,2008-01-15,2 years 1 day 3 minutes ago
git log --since=2.weeks
假如刚提交了的,然后发现少提交了某个文件,可以执行add、commit --amend再次提交,实际只提交一次
git commit -m 'xxxx'
git add xxx
git commit --amend
假如分两次提交,但是使用add *还未进行commit的时候,将两次提交的都加入到了暂存区,可以使用
#将xxx文件移除到暂存区
git reset HEAD xxx
假如你现在不需要对某个文件进行修改,或者你想要还原你的修改,可以使用checkout还原,但是一定要知道,这个命令不可恢复的。
git checkout --xxx
远程仓库是指在互联网或者其他网络上托管的项目版本仓库,比如本地的项目可以push到远程仓库,然后供他人使用。
该命令会列出每个远程仓库的简短名称。在某个仓库被克隆后,你至少可以看到名为origin的远程仓库,这是git给克隆源服务器取的默认名称,并且可以使用-v显示远程仓库对应的url
git remote [-v]
#origin [url]
通过git remote add可以添加远程仓库,而shortname可以方便后续拉或者提代码,比如提代码的时候有个git push origin master,表示的就是往shortname为origin的远端分支,推送master分支的代码,默认关联的第一个远程分支的shortname为origin。
git remote add [shortname] [url]
上一小节已经说了可以通过shortname将远程分支做一个名称替换。那么可以通过git fetch 方式拉去代码
git fetch [shortname]
当本地开发已完成之后,需要将代码提交到远程仓库,但是前提是,必须拥有远程仓库有的写权限
git push [shortname] [branchname]
#git push origin master
如果想要查看远程仓库的更多信息,可以使用git remote show进行查看,可以看到远程仓库的地址,以及远程分支的跟踪情况,并且可以看到当前本地分支执行pull和push会对应推送到远程仓库的哪个分支上。
git remote show [shortname]
#git remote show origin
可以使用rename来重命名远程分支的shortname,并且可以使用rm来删除掉远程仓库的关联
git remote rename [shortname_bf] [shortname_af]
#将远程仓库的简短名称origin重命名为test
#git remote rename orgin test
git remote rm [shortname]
#将简短名称为origin的远程仓库进行删除操作
#git remote rm origin
可以通过git tag可以把特定的历史版本标记为重要版本。标签有两种,一种轻量的标签(lightweight),一种注释标签(annotated)
轻量标签
git tag
git tag xxx
git tag -a可以创建标签,-m是添加注释,并且使用git show可以查看当前标签数据以及对应
git tag -a v1.0 -m 'my wokr version 1.0'
git show v1.0
使用git tag来把提交的校验和保存到文件中
通过git log+git tag可以补加标签
git log
git tag -a 分支hash
默认情况下,git push不会把标签传输到远程服务器上,但是创建了标签之后,必须明确的将标签推送到共享服务器上
git push origin [tagname]
#一次性推送多个标签,会把服务器上还没有的标签都推送过去
git push origin --tags
你无法在git上真正检出一个标签的,因为标签无法移动。如果想把某个版本的仓库放入像是标签的工作目录中,可以使用
git checkout -b [branchname] [tagname]
在特定标签上创建一个新的分支