赞
踩
Git是一个分布式版本管理系统(VCS),最早由Linux之父Linus使用C语言开发,主要有以下四个概念:
.git
目录下的index
文件.git
查看git
命令行输入git
查看是否已安装git
安装git
Windows/Mac
在Git官网下载安装程序,然后按照提示安装即可
Linux
命令行输入:
sudo apt-get install git
命令行输入:
git config --global user.name <user-name>
git config --global user.email <user-email>
其中,<user-name>
是用户名,<user-email>
是用户邮箱
--system
参数将配置应用于所有用户--global
参数将配置应用于本用户--local
参数将配置应用于本仓库创建仓库
git init
命令初始化仓库。这时该目录下会多出一个.git
隐藏目录编辑文件
在gitdemo(或其子目录)下新建文本文档readme.txt,内容如下:
Git is a distributed version control system.
Git is free software distributed under the GPL.
添加到仓库
命令行输入如下命令把工作区中的内容添加到暂存区
git add readme.txt
命令行输入如下命令把暂存区中的内容提交到版本库
git commit readme.txt -m "the first commit"
git init
命令初始化仓库使用git add <file>
命令把工作区中文件<file>
的变化添加到暂存区
使用git commit <file> -m <comment>
命令把暂存区中的内容提交到版本库,其中,-m
参数和后面的说明<comment>
可以省略,但为了查找方便,建议添加说明,例如:
git commit -m "the fitst commit"
使用git log --pretty=oneline
命令按照从近到远的顺序显示提交历史,--pretty=oneline
参数表示只显示精简信息,可以省略,例如:
git log
HEAD
表示最新提交的版本,HEAD^
表示上一个提交的版本, HEAD^^
表示上上一个提交的版本……依此类推HEAD~<n>
表示最新提交之前的第<n>
个版本使用git reset --hard <version>
命令回退到<version>
标识的版本,其中<version>
可以用HEAD
格式表示,也可以用<commit id>
表示(可以不写全),例如回退到上一个版本(9bd243df8476a7b4e1a6eba21f2433789a79e673
标识的版本):
git reset --hard HEAD^
或
git reset --hard 9bd243
说明
使用<commit id>
可以回退版本,也可以在回退后恢复到回退前的版本,例如,如果当前已经回退到9bd243df8476a7b4e1a6eba21f2433789a79e673
所标识的版本之前,恢复到该版本可以使用如下命令:
git reset --hard 9bd243
如果忘记了commit id
,可以使用git reflog
命令查看命令历史
git status
命令查看状态信息
git diff <version> -- <file>
命令显示版本库中<version>
标识的版本和工作区中版本的差别,例如显示版本库中readme.txt的最新版本和工作区中版本的差别
git diff HEAD -- readme.txt
git reset HEAD <file>
命令撤销暂存区中的变动git checkout -- <file>
撤销工作区中文件<file>
的所有变动,回退到最近一次git add
或git commit
的状态git checkout -- <file>
和git checkout <branch>
git rm <file>
命令删除暂存区文件git commit
命令提交暂存区即可git checkout -- <file>
撤销工作区中的变动(这里是指删除)即可git remote add origin <repo-name>
命令关联远程仓库<remote-repo>
,其中,origin
是惯用名,可以根据需要更改,例如改为gitee
,github
等git push origin <branch-name>
命令将当前分支推到远程仓库的<branch-name>
分支。第一次推送时,-u
参数把本地分支和远程仓库分支关联起来,可以简化后续使用时的命令git remote rm <remote-repo>
命令删除远程仓库<remote-repo>
,建议删除前先查看远程仓库信息
git remote
命令查看远程仓库的信息git remote -v
命令查看远程仓库的详细信息git clone <remote-repo>
命令克隆远程仓库<remote-repo>
到本地
注意
Git执行多种协议,如ssh、https等,推荐使用ssh协议
git pull <remote-repo>
命令抓取远程仓库<remote-repo>
到本地
git branch <branch-name>
命令创建一个新的分支,名字为<branch-name>
,例如:
git branch dev
新版Git可使用git switch <branch-name>
命令
git chechout -b <branch-name>
命令创建并切换到分支<branch-name>
,例如:
git checkout -b dev
新版Git可使用命令git switch -b <branch-name>
git checkout -b <branch-name1> origin/<branch-name2>
命令在本地创建与远程分支<branch-name2>
对应的分支<branch-name1>
,并切换到该分支,建议<branch-name1>
和<branch-name2>
名字相同
git chechout <branch-name>
命令切换当前分支为<branch-name>
,例如:
git checkout dev
git branch
命令查看所有分支,其中当前分支前用*
标识git log --graph
命令查看含有分支合并图的历史信息git merge <branch-name>
命令将分支<branch-name>
合并到当前分支,例如:
git merge dev
--no-ff
参数表示不使用Fast forward
合并模式,而是使用基础合并(新的提交),此时建议使用-m
参数指定提交说明
注意
Fast forward
合并模式是指合并时,将当前分支指针指向待合并分支指针所指的版本git cherry-pick <commit id>
命令将<commit id>
标识的版本合并到当前分支,例如:
git cherry-pick 9bd243
其中,9bd243df8476a7b4e1a6eba21f2433789a79e673
是一个版本标识
git branch -d <branch-name>
命令删除分支<branch-name>
,例如:
git branch -d dev
git branch -D <branch-name>
命令强行删除分支<branch-name>
,例如:
git branch -D dev
git branch --set-upstream-to <branch-name1> origin/<branch-name2>
命令将本地分支<branch-name1>
与远程分支<branch-name2>
关联起来
git rebase
命令将交叉分支整理成直线分支
git stash
命令保存正在进行的未提交分支的工作现场
git stash list
命令查看保存的现场
git stash apply
命令恢复保存的现场
git stash drop
命令删除保存的现场
git stash pop
命令恢复并删除保存的现场
例如:
一次bug修复前:
git stash
bug修复后:
git stash apply
git stash drop
或
git stash pop
git push origin <branch-name>
推送自己的变动git pull
抓取以合并分支;如果提示no tracking information
,则使用git branch --set-upstream-to <branch-name1> origin/<branch-name2>
git push origin <branch-name>
推送git tag <tag-name>
命令创建一个标签<tag-name>
,例如:
git tag v1.0.0
git tag <tag-name> <commit id>
命令为<commit id>
标识的版本创建标签<tag-name>
git tag -a <tag-name> -m <comment> <commit id>
命令为标签<tag-name>
指定说明<comment>
git tag
命令查看标签,其中标签按字母顺序排列git show <tag-name>
命令查看标签说明git tag -d <tag-name>
命令删除标签<tag-name>
git push origin :refs/tags/<tag-name>
git push origin <tag-name>
命令推送标签到远程(创建的标签都在本地,不会自动推送到远程)git push origin --tags
命令推送尚未推送的所有标签到远程.gitignore
文件,然后把需要忽略的文件名或规则填写到该文件中去。该文件本身需要放到版本库中进行管理git status
命令检查上述文件中的规则是否正确。规则中,*
表示匹配所有,!
表示不匹配git check-ignore -v <file>
检查规则git config --global alias.<alias> <name>
命令为<name>
配置别名<alias>
,例如:
git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
.git/config
文件是Git的配置文件,[alias]
后是已经配置的别名
# 显示配置信息
$ git config --list
# 编辑配置文件
$ git config -e [--global]
# 配置用户信息
$ git config [--global] user.name [<user-name>]
$ git config [--global] user.email [<user-email>]
# 当前目录下新建仓库
$ git init
# 新建目录并将其初始化为仓库
$ git init [<dir>]
# 克隆项目及其提交历史
$ git clone [<url>]
# 克隆项目及其提交历史,并指定本地文件夹名称
$ git clone [<url>] [<dir>]
# 添加指定文件到暂存区
$ git add [<file1>] [<file2>] ...
# 添加指定目录及其子目录到暂存区
$ git add [<dir>]
# 添加当前目录下所有文件、文件夹到暂存区
$ git add .
# 分多次提交同一文件的多处变动,添加每个变动都需要确认
$ git add -p
# 删除工作区中指定文件,并在暂存区记录本次删除
$ git rm [<file1>] [<file2>] ...
# 停止追踪指定文件,但该文件仍保留在工作区
$ git rm --cached [<file>]
# 更改文件名,并在暂存区记录本次变动
$ git mv [<old-name>] [<new-name>]
# 提交暂存区所有内容到仓库 $ git commit -m [<comment>] # 提交暂存区的指定文件到仓库 $ git commit [<file1>] [<file2>] ... -m [<comment>] # 提交自上次提交后工作区的变动到仓库 $ git commit -a # 提交时显示所有变动信息 $ git commit -v # 替代上一次提交 $ git commit --amend -m [<comment>] # 重做上一次提交,同时提交指定文件的变化 $ git commit --amend [<file1>] [<file2>] ...
# 恢复暂存区的指定文件到工作区 $ git checkout [<file>] # 恢复某次提交中的指定文件到暂存区和工作区 $ git checkout [<version>] [<file>] # 恢复暂存区的所有文件到工作区 $ git checkout . # 暂存区中的指定文件重置为上一次提交的版本,但工作区不变 $ git reset [<file>] # 暂存区与工作区重置为上一次提交的版本 $ git reset --hard # 当前分支的指针重置为指定提交,并重置暂存区为该提交的版本,但工作区不变 $ git reset [<version>] # HEAD指针重置为指定提交,同时重置暂存区和工作区为该提交的版本 $ git reset --hard [<version>] # HEAD指针重置为指定提交,但保持暂存区和工作区不变 $ git reset --keep [<version>] # 当前分支新建提交,并将指定的版本撤销到该提交 $ git revert [<version>] # 存储并移除未提交的变动 $ git stash # 存储的未提交变动移入工作区,但不删除存储 $ git stash apply # 删除存储的未提交变动 $ git stash drop # 存储的未提交变动移入工作区,并删除存储 $ git stash pop
# 显示文件的变化 $ git status # 显示文件变化的简短信息 $ git status -s # 显示当前分支的提交历史 $ git log # 显示当前分支的提交历史和每次提交发生变动的文件 $ git log --stat # 图形化显示分支合并历史 $ git log --graph # 显示每次提交的tag信息 $ git log --decorate # 显示指定作者的提交历史 $ git log --author=[<author-name>] # 显示根据时间筛选的log信息 $ git log [--since] [--util] [--before] [--after] # 根据关键词搜索提交历史 $ git log -S [<keyword>] # 显示某次提交之前的所有提交说明,每个说明占一行 $ git log [<tag>] <version> --pretty --oneline # 显示某次提交之前符合搜索条件的所有提交说明 $ git log [<tag>] <version> --grep <condition> # 显示某个文件包括改名在内的提交历史 $ git log --follow [<file>] $ git whatchanged [<file>] # 显示指定文件的每一次变动 $ git log -p [<file>] # 显示最近n次提交 $ git log -<n> --pretty --oneline # 显示所有提交过的用户,按提交次数排序 $ git shortlog -sn # 显示指定文件的修改者、修改时间、修改内容等历史信息 $ git blame [<file>] # 显示暂存区和工作区的差异 $ git diff # 显示暂存区中指定文件和上一次提交的差异 $ git diff --cached [<file>] # 显示工作区与当前分支最新提交的差异 $ git diff HEAD # 显示两个分支分开后的差异 $ git diff [<version1>]...[<version2>] # 显示未提交的变动行数 $ git diff --shortstat "@{0 day ago}" # 显示某次提交的元数据和内容变化 $ git show [<version>] # 显示某次提交发生变动的文件 $ git show --name-only [<version>] # 显示指定提交中指定文件的变动内容 $ git show [<version>]:[<file>] # 显示当前分支的最近提交 $ git reflog
# 获取远程仓库的所有变动 $ git fetch [<remote-repo>] # 显示所有远程仓库 $ git remote -v # 显示某个远程仓库的信息 $ git remote show [<remote-repo>] # 增加一个新的远程仓库,并命名 $ git remote add [<repo-name>] [<url>] # 获取远程仓库的变动,并与本地分支合并 $ git pull [<remote-repo>] [<branch-name>] # 推送本地指定分支到远程仓库 $ git push [<remote-repo>] [<branch-name>] # 强行推送当前分支到远程仓库 $ git push [<remote-repo>] --force # 推送所有分支到远程仓库 $ git push [<remote-repo>] --all
# 显示所有本地分支 $ git branch # 显示所有远程分支 $ git branch -r # 显示所有本地分支和远程分支 $ git branch -a # 新建一个分支但不切换分支 $ git branch [<branch-name>] # 新建一个分支并切换到该分支 $ git checkout -b [<branch-name>] # 新建一个指向指定提交的分支 $ git branch [<branch-name>] [<version>] # 新建一个分支并与指定的远程分支建立联系 $ git branch --track [<branch-name>] [<remote-branch>] # 切换到指定分支,并更新工作区 $ git checkout [<branch-name>] # 切换到上一个分支 $ git checkout - # 本地分支与指定的远程分支建立联系 $ git branch --set-upstream [<branch-name>] [<remote-branch>] # 合并指定分支到当前分支 $ git merge [<branch-name>] # 合并指定提交到当前分支 $ git cherry-pick [<version>] # 删除分支 $ git branch -d [<branch-name>] # 删除远程分支 $ git push origin --delete [<branch-name>] $ git branch -dr [<remote/branch>]
# 显示所有tag $ git tag # 为当前提交新建一个tag $ git tag [<tag>] # 为指定提交新建一个tag $ git tag [<tag>] [<version>] # 删除本地tag $ git tag -d [<tag>] # 删除远程tag $ git push origin :refs/tags/[<tag>] # 查看tag信息 $ git show [<tag>] # 提交指定tag $ git push [<remote-repo>] [<tag>] # 提交所有tag $ git push [<remote-repo>] --tags # 新建一个分支,指向某个tag $ git checkout -b [<branch-name>] [<tag>]
# 生成一个可供发布的压缩包
$ git archive
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。