参考
Git初步认识
Git仓库关系图
Git仓库间命令使用示意图
Git权限
文件状态转换图
Git基础篇
Git配置
Git建立忽略文件
Git别名
获取Git仓库
创建本地仓库
拉取远程仓库
fetch
添加文件
提交文件
查看状态
查看日志
比较差异
分支管理
查看分支
创建分支
切换分支
删除分支
合并分支
拉取
推送
Git进阶
常用命令
.git
文件git init
原本本地仓库只包含着工作区,这是最常见的工作状态。此时,git init
一下,表示在本地区域创建了一个.git
文件,版本区建立。git add .
表示把工作区的所有文件全部提交到版本区里面的暂存区git add ./xxx/
一条一条分批添加到暂存区。git commit -m "xxx"
把暂存区的所有文件提交到仓库区,暂存区空空荡荡。git remote add origin https://github.com/name/name_cangku.git
把本地仓库与远程仓库连接起来。git push -u origin master
把仓库区的文件提交到远程仓库里。nothing to commit, working tree clean
注:checkout一般是将暂存区的文件替换工作区的
其他:
admin ,拥有所有权限(这毋庸置疑)
owner,可以创建、编辑、重命名、删除、fork个人仓库
认证用户,可以创建个人仓库、fork个人仓库
git config --global user.name “你的名字”
git config --global user.email “你的邮箱”
git config -l
查看配置
注:global表示全局,这台机器所有的Git仓库都会使用这个配置。允许单个仓库使用其他的名字和邮箱。
touch .gitignore
在当前目录下建立一个.gitignore文件,可以有多个,影响范围当前文件(夹)及子文件(夹).gitignore文件忽略内容demo:
*.iml
*.apk
.gradle/
.idea/
gradlew/
gradlew.bat
local.properties
.idea/workspace.xml
.idea/libraries/
.DS_Store
build/
captures/
.externalNativeBuilda
.svn/
app/release/
注:为什么没有生效,可能是因为你的缓存区已经有忽略的文件了,所以需要先清空缓存区里的文件,重新add和commit操作
有两种配置:1、命令方式,2、修改配置文件
git config --global alias.psm “push origin master”
以上就是将push origin master
命令修改别名为psm
,这样的话,使用的时候就只需要输入:git psm
就搞定了如果要批量修改,可以直接改配置文件。
如果是windows系统,那么直接找到用户目录下的 .gitconfig 文件,如下:
通过文本打开,然后可以看到:
以上是我电脑设置的别名,其中[alias]就是设置别名组,如果没有设置过,可以直接手动添加[alias]组
[alias]
co = checkout
ci = commit
st = status
br = branch
psm = push origin master\n
plm = pull origin master
last = log -1 HEAD
lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
假设在D盘的根目录下创建本地仓库gittest
cd d:
或者 cd /d
进入D盘根目录mkdir gittest
创建gittest目录cd gittest
进入gitest目录git init
初始化版本库
注:版本库创建好之后,会多出一个.git的文件夹,并且会自动新建一个master分支。
命令格式: git clone
git clone https://github.com/libgit2/libgit2
克隆远程仓库到当前目录git clone https://github.com/libgit2/libgit2 /d/gittest
克隆远程仓库到指定目录git clone -b <分支名> xxx.git
在本地创建与远程仓库同名的分支,且该分支名必须在远程仓库中已存在
注:git clone 命令默认的只会建立master分支
命令格式:git fetch remote_repo remote_branch_name:local_branch_name
git fetch origin master
将远程仓库的master分支拉到本地版本区
git add <文件名>
添加某文件到暂存区git add -a -m “”
将当前分支工作区的所有文件提交到暂存区git add .
把工作区的文件全部提交到暂存区git add -A
提交所有变化git add -u
u->update,提交被修改(modified)和被删除(deleted)文件,不包括新文件(new)git add .
提交新文件(new)和被修改(modified)文件,不包括被删除(deleted)文件
git commit -m “提交信息备注”
提交暂存区的文件到本地版本库git commit -a -m “提交信息备注”
将所有已跟踪文件中的执行修改或删除操作的文件都提交到本地仓库,即它们没有经过git add添加到暂存区git commit -f -m “提交信息备注”
强制提交git commit --amend
也叫追加提交,它可以在不增加一个新的commit-id的情况下将新修改的代码追加到前一次的commit-id中
状态信息:新增的文件、被修改的文件、已添加到暂存区但未提交的文件
git status
查看工作区状态git status -v
查看工作区状态详情
git log
查看提交日志git last
显示最近一次的提交git log --oneline
已每个分支节点一行简化输出loggit log --stat
在git log 的基础上输出文件增删改的统计数据git log -p
控制输出每个commit具体修改的内容,输出的形式以diff的形式给出。git shortlog
用来输出汇总信息,以作者进行分类。git shortlog -s
可以用来统计每个作者的commit数量git shortlog -n
可以用来对统计的量进行倒序排列git log --pretty=”%cn committed %h on %cd”
自定义输出的信息git log --author=”XXX”
用来过滤commit,限定输出给定的用户git log --before/--after
限定指定日期范围的log,git log --after=‘18-4-2020’git log --merges/--no-merges
查看合并/非合并loggit log --decorate
显示对应commit所属的branch和tag信息git log --oneline --graph --decorate
查看分支图
diff里面a表示前面那个变量,b表示第二个变量
git diff
比较工作区与暂存区中所有已跟踪文件的差异git diff <文件名>
比较工作区与暂存区中某文件的差异git diff --stat
比较工作区与暂存区中所有已跟踪文件的简要差异git diff --cached <文件名>
比较暂存区与版本库中文件的差异,等同参数--stagedgit diff --staged <文件名>
比较暂存区与版本库中文件的差异,等同参数--cachedgit diff <分支hash1> <分支hash2>
比较两个分支的差异git diff <分支1>…<分支2>
输出自<分支1>和<分支2>开发以来,<分支2>分支上发生的changedgit diff <分支1> <分支2>
比较两个分支的差异
git branch
查看本地分支git branch -a
查看所有分支git branch -av
查看所有分支详情git branch -avv
查看所有分支详情,包括本地分支与远程分支的对应情况git branch -r
查看远程分支
git branch <分支名>
创建某分支
git checkout <分支名>
切换到某分支git checkout -b <分支名>
创建并切换到某分支
注:
git checkout -t origin/<分支名>
等同于git checkout -b dev origin/<分支名>
在本地新建同名的某分支,并切换到该分支git checkout -
切换到之前的分支git checkout -- <文件名>
将暂存的某文件替换工作区的
git branch -d <分支名>
删除某分支
git merge dev
将dev分支合并到当前分支,fast-forwarding模式git merge --no--ff dev
将dev分支合并到当前分支,非fast-forwarding模式git merge origin/master
将origin上的master分支 merge 到当前 branch 上
注:ff模式合并如果删除分支,则会丢失merge分支信息。no-ff模式可以保存你之前的分支历史。能够更好的查看 merge历史,以及branch 状态。
git pull
命令用于将远程主机分支,更新到本地。它的格式与git push命令相仿。git pull <远程主机名> <远程分支名>:<本地分支名>
git pull origin master
将origin主机的master分支拉到本地的当前分支。git pull origin master:dev
将origin主机的master分支拉到本地的dev分支。如果后者不存在,则会被新建。git pull origin master --allow-unrelated-histories
git push
命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。git push <远程主机名> <本地分支名>:<远程分支名>
注意:这里的:前后是必须没有空格的。
注意,分支推送/拉取顺序的写法是<来源地from>:<目的地to>,所以git pull是<远程分支>:<本地分支>,而git push是<本地分支>:<远程分支>。
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
git push origin master
将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。git push origin :master
等同于 git push origin --delete master
表示删除origin主机的master分支,危险,操作需谨慎!!!省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支。git push origin
将当前分支推送到origin主机的对应分支。如果当前分支只有一个追踪分支,那么主机名都可以省略。git push -u origin master
将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push
了。 其中 -u 等同于 --set-upstream。git push
当前分支只有一个追踪分支,那么主机名都可以省略。一、开发分支(dev)上的代码达到上线的标准后,要合并到 master 分支
git checkout dev
切换到dev分支git pull
更新dev分支git checkout master
切换到master分支git merge dev
将dev分支合并到master分支git push -u origin master
将本地master分支推送到origin远程仓库的master分支中二、当master代码改动了,需要更新开发分支(dev)上的代码
git checkout master
切换到master分支git pull
更新master分支git checkout dev
切换到dev分支git merge master
将master分支合并到dev分支git push -u origin dev
将本地dev分支推送到origin远程仓库的master分支中
git config --global user.name “你的名字”
让你全部的Git
仓库绑定你的名字git config --global user.email “你的邮箱”
让你全部的Git
仓库绑定你的邮箱git config --global color.ui true
让Git显示颜色,会让命令输出看起来更醒目git init
初始化你的仓库git add .
把工作区的文件全部提交到暂存区git add .//
把工作区的
文件提交到暂存区git add -f
强制提交已忽略的的文件git commit -m “xxx”
把暂存区的所有文件提交到仓库区,暂存区空空荡荡git remote add origin https://github.com/name/name_cangku.git
把本地仓库与远程仓库连接起来git push -u origin master
把仓库区的主分支master
提交到远程仓库里git push -u origin <其他分支>
把其他分支提交到远程仓库git status
查看当前仓库的状态git diff
比较工作区与暂存区中所有已跟踪文件的差异git diff <文件名>
比较工作区与暂存区中某文件的差异git diff --cached <文件名>
比较暂存区与版本库中文件的差异,等同参数--stagedgit diff --staged <文件名>
比较暂存区与版本库中文件的差异,等同参数--cachedgit diff <分支hash1> <分支hash2>
比较两个分支的差异git log
显示从最近到最远的提交历史git log --graph
查看分支合并图git log --oneline --graph --decorate
查看分支合并图git clone + 仓库地址
下载克隆文件git reset --hard + 版本号
回溯版本,版本号在commit
的时候与master
跟随在一起git reflog
显示命令历史git checkout --
撤销命令,用版本库里的文件替换掉工作区的文件。我觉得就像是Git
世界的ctrl + z
git rm
删除版本库的文件git branch
查看当前所有分支git branch <分支名字>
创建分支git branch -a
查看所有分支git branch -av
查看所有分支详情git branch -avv
查看所有分支详情,包括本地分支与远程分支的对应情况git branch -d <分支名字>
删除分支,有可能会删除失败,因为Git
会保护没有被合并的分支git branch -D + <分支名字>
强行删除,丢弃没被合并的分支git checkout <分支名字>
切换到分支git checkout -b <分支名字>
创建并切换到新分支git merge <分支名字>
合并分支git merge --no-ff <分支名字>
合并分支的时候禁用Fast forward
模式,因为这个模式会丢失分支历史信息git stash
当有其他任务插进来时,把当前工作现场“存储”起来,以后恢复后继续工作git stash list
查看你刚刚“存放”起来的工作去哪里了git stash apply
恢复却不删除stash
内容git stash drop
删除stash
内容git stash pop
恢复的同时把stash内容也删了git remote
查看远程库的信息,会显示origin
,远程仓库默认名称为origin
git remote -v
显示更详细的信息git pull
把最新的提交从远程仓库中抓取下来,在本地合并,和git push
相反git rebase
把分叉的提交历史“整理”成一条直线,看上去更直观git tag
查看所有标签,可以知道历史版本的taggit tag
打标签,默认为HEAD
。比如git tag v1.0
git tag <版本号>
把版本号打上标签,版本号就是commit
时,跟在旁边的一串字母数字git tag -a -m “<说明>“
创建带说明的标签。 -a
指定标签名,-m
指定说明文字git tag -d
删除标签git show
查看标签信息git push origin
推送某个标签到远程git push origin --tags
一次性推送全部尚未推送到远程的本地标签git push origin :refs/tags/
删除远程标签
git check-ignore -v
检查为什么Git会忽略该文件