Git操作
基本命令
显示配置列表
git config --l(or list)
:显示配置列表
基本命令
git init
:创建版本库git status
:查看版本库状态git add xxx.xxx
: 将文件纳入[[Git#暂存区|暂存区]]
git commit -m information xxx.xx
表示真正地纳入到[[Git#存储区域|版本库]]中 -m 表示提交时的信息(message),是必须输入的。 用于描述不同版本之间的差别信息
git commit -a -m “message”
-a 参数设置修改文件后不需要执行 git add 命令,直接来提交
git show
: 查看当前提交git log
:查看日志git log --graph --decorate --pretty=oneline --abbrev-commit
`
—graph commit之间将展示连线
—decorate 显示commit里面的分支
—pretty=oneline 只显示commit信息的标题
—abbrev-commit 只显示commit SHA1的前7位
git restore xxxx.xxx
:从版本库恢复文件
git remote
:查看远程仓库名git remote -v/--version
:查看仓库信息git remote add $name $url
:添加远程仓库git remote remove $name
:删除添加的远程仓库git remote show $name
:查看指定仓库的详细信息git remote rename $name $newName
:对远程仓库改名
git push <远程仓库名> <本地分支名>:<远程分支名>
注意,分支推送顺序的写法是<来源地>:<目的地>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。
git push <远程仓库名> :<远程分支名>
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。注意第一个分支(origin/master)是不可以被删除的,等同于 `git push <远程仓库名> --delete :远程仓库名
git push <远程仓库名> <本地分支名>
如果省略远程分支名,则表示将本地分支推送到与之存在Tracking(追踪关系)的远程分支,通常两分支同名。如果远程分支不存在,则会自动创建分支。
git push
如果当前分支只有一个追踪分支,那么仓库名都可以省略
git push -u <远程仓库名> <本地分支名>
如果当前分支与多个仓库存在追踪关系,则可以使用-u选项指定一个默认仓库,这样后面就可以不加任何参数使用git push。
git push --all <远程仓库名>
不管是否存在对应的远程分支,将本地的所有分支都推送到远程仓库,这时需要使用–all选项。
git push -f(or force) <远程仓库名>
如果远程仓库的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程仓库。这时,如果你一定要推送,可以使用–force选项。上面命令使用–force选项,结果导致远程仓库上更新的版本被覆盖。除非你很确定要这样做,否则应该尽量避免使用–force选项。
git push <远程仓库名> --tags
git push不会推送标签(tag),除非使用–tags选项
git fetch <远程仓库名>
将远程仓库的所有分支都拉取到本地,> fetch 后不带分支名,则是所有仓库里的分支
注意:所取得的远程分支在本地仓库上要用"远程仓库名/分支名"的形式读取。比如origin仓库的master,就要用origin/master读取。
git fetch <远程仓库名> <远程分支名>
这个命令可以用来测试远程仓库的远程分支branch1是否存在, 如果存在, 返回0, 如果不存在, 返回128, 抛出一个异常
git pull <远程仓库名> <远程分支名>:<本地分支名>
注意这个远程分支名是不带origin/的前缀的(别名的前缀),有冲突的时候修改冲突即可,修改完毕add、commit
git pull <远程仓库名> <远程分支名>
上面命令表示,取回origin/<远程分支名>分支,再与当前分支合并。实质上,这等同于先做git fetch,再做git merge
git pull origin
本地的当前分支自动与对应的origin仓库"追踪分支"(remote-tracking branch)进行合并。
git pull
如果当前分支只有一个追踪分支,连远程仓库名都可以省略
git branch 分支名称
创建分支
^f87e45
git branch -v
查看分支
git checkout 分支名称
切换分支
^92d695
git branch -d 分支名称
删除分支
git checkout -b 分支名称
[[Git#f87e45|创建其他分支]],并直接[[Git#92d695|切换到新的分支]]
git merge 分支名称
合并分支
相关概念
文件状态
- untracked files(未追踪文件)
文件虽然放置到了版本库的文件目录中,被Git软件识别到了,但是未纳入到版本库管理中。所以属于未追踪文
- cached file
暂存状态,认为此时文件只是一种临时草稿状态,随时可能会进行修改或删除,并不算真正的操作完成状态。所以并不会把文件纳入到版本库管理中。
- modified
表示文件已经修改了
版本控制
版本控制(Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。
区域
GIt为了方便对文件进行版本控制,划分为三个区域
存储区域
Git软件用于存储资源得区域。一般指得就是.git文件夹
暂存区
Git用于比对存储区域和工作区域得区域。Git根据对比得结果,可以对不同状态得文件执行操作。
工作区域
Git软件对外提供资源得区域,此区域可人工对资源进行处理。
设置自己的帐号信息(第一次使用需要设置)
如果你是第一回使用Git软件,需要告诉Git软件你的名称和邮箱,否则是无法将文件纳入到版本库中进行版本管理的。这是因为在多人协作时,不同的用户可能对同一个文件进行操作,所以Git软件必须区分不同用户的操作,区分的方式就是名称和邮箱。
当然了,你可能会说我就用本地库就行了,不需要进行多人协作,是不是就可以不用配置呢。这是不行的,因为Git软件的设计初衷本身就是针对于linux系统的分布式开发协同工作,所以它天生就是用于分布式协同工作的,这里无论你是否使用这个功能,它本身就是这么设计的。所以是一定要配置的
git config --global user.name "你的名字或昵称"
:设置基本信息git config --global user.email "你的邮箱"
:设置邮箱
这里的 –global表示全局配置,后续的所有文件操作都会使用该用户名称及邮箱。此时在操作系统的用户目录,会产生新的配置文件
HEAD的概念
HEAD 是当前分支引用的指针,它总是指向某次commit,默认是上一次的commit。 这表示 HEAD 将是下一次提交的父结点。 通常,可以把 HEAD 看做你的上一次提交的快照。当然HEAD的指向是可以改变的,比如你提交了commit,切换了仓库,分支,或者回滚了版本,切换了tag等。