Git知识
一、Git安装配置
1、安装
Debian/Ubuntu Git 安装命令为:
apt-get install libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev
apt-get install git
Centos/RedHat 安装命令为:
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel
yum -y install git-core
2、配置
Git 提供了一个叫做 git config 的工具,专门用来配置或读取相应的工作环境变量。
这些环境变量,决定了 Git 在各个环节的具体工作方式和行为。这些变量可以存放在以下三个不同的地方:
/etc/gitconfig
文件:系统中对所有用户都普遍适用的配置。若使用git config
时用--system
选项,读写的就是这个文件。~/.gitconfig
文件:用户目录下的配置文件只适用于该用户。若使用git config
时用--global
选项,读写的就是这个文件。- 当前项目工作目录中的
.git/config
文件:这里的配置仅仅针对当前项目有效。
每一个级别的配置都会覆盖上层的相同配置,所以 .git/config
里的配置会覆盖 /etc/gitconfig
中的同名变量。
查看配置信息:
1、使用命令git config --list
,显示的是三个配置文件中的所有内容,下面的配置信息会覆盖上面的配置信息。
2、直接使用vi或vim去查看对应文件中的内容,如vim ~/.gitconfig
3、直接查看某个环境变量的设定git config user.name
二、Git工作区、暂存区和版本库
git add [.][file]
:工作区的内容写入缓存区
git commit -m <描述内容>
:缓存区的内容提交到版本库
git reset HEAD
:暂存区的目录树会被重写,被 HEAD指向的目录树所替换,但是工作区不受影响
git rm --cached <file>
:直接从暂存区删除文件,工作区则不做出改变
git checkout .
或者git checkout -- <file>
:用暂存区全部或指定的文件替换工作区的文件
git checkout HEAD .
或者git checkout HEAD <file>
:用 HEAD 指向的分支中的全部或者部分文件替换暂存区和以及工作区中的文件
注:HEAD是一个指向不同分支的指针
三、基本操作
1、创建仓库
git init [文件夹名]
:初始化当前目录或者指定目录
git clone <url> [文件夹名]
:克隆项目到当前目录或者指定目录
2、提交与修改
git add [.][file]
:工作区的内容写入缓存区
git status [-s]
:查看自上次提交后是否对文件再次修改,-s
表示简短输出
git diff [--cached][HEAD][branch1 branch2][commit_id1 commit_id2][文件名]
:查看工作区与缓存区的不同【缓存区与版本库的不同】【工作区与版本库的不同】【不同分支的不同】【两次提交之间的不同】【指定对应文件】
git commit [文件1] [文件2] -m <描述内容>
:缓存区的内容提交到版本库
git reset [--soft | --mixed | --hard] [HEAD]
:用于回退版本,可以指定退回某一次提交的版本,soft只回退版本库、mixed回退版本库和缓存区、hard回退版本库、缓存区和工作区。HEAD 表示当前版本、HEAD^ 上一个版本…,HEAD~0 表示当前版本,HEAD~1 上一个版本…
git rm [-f] [--cached] <文件名>
:从缓存区与工作区【强制删除】【只在缓存区删除】删除指定文件
git mv <文件名> <新文件名>
:重命名文件
git checkout .
或者git checkout -- <file>
:用暂存区全部或指定的文件替换工作区的文件
git checkout HEAD .
或者git checkout HEAD <file>
:用 HEAD 指向的分支中的全部或者部分文件替换暂存区和以及工作区中的文件
3、日志
git log [--oneline][--graph][--author=xxx]
:查看详细提交日志【简约日志】【拓扑图形式】【产看指定用户提交日志】
git blame <文件名>
:查看指定文件修改记录
git reflog
:查看所有提交日志
4、远程操作
git remote [-v][show remote][add shortname url][rm name][rename old_name new_name]
:【显示所有远程仓库】【显示某个远程仓库的信息】【添加远程版本库】【删除远程仓库】【重命名】
git fetch <remote> [branch1][branch2]...
:从远程获取所有代码库【分支1的代码库】【分支2的代码库】…拉取下来的远程代码库可以当作一个分支使用,可以使用git merge origin/feature
来合并远程代码库和当前分支,一般都是在本地建立一个特性分支,将其与拉取下来的远程特性分支之间绑定,可以使用git branch --set-upstream-to=origin/feature
将HEAD指向的分支与远程分支origin/feature
进行绑定,后续可以直接使用git pull
和git push
来更新。
git pull [remote][远程分支名][远程分支名:本地分支名]
:远程拉取代码并合并本地版本库中,若本地分支之前已经与远程分支绑定,则可以直接使用git pull
来更新本地分支,git pull
相当于git fetch
+git merge
git push <remote> <本地分支名>:<远程分支名>
:将本地分支版本上传到远程并合并,若本地分支和远程分支名相同,则可以省略为git push <remote> <本地分支名>
,第一次使用时使用git push -u <remote> <本地分支名>
,则后续提交时可以直接使用git push
git push <remote> --delete <远程分支名>
:可用于删除远程主机的对应分支
5、分支管理
git branch [-r][-a]
:罗列本地分支【本地的远程分支】【所有分支】
git branch <branch_name>
:创建分支
git checkout [-b] <branch_name> [origin/远程分支]
:切换分支【创建并切换分支】【创建并切换分支,并且和远程分支绑定】
git branch -d[-D] <branch_name>
:删除已经合并的分支【未合并分支】
git merge <branch_name>
:合并分支到HEAD,分支合并冲突时,需要手动解决冲突,并使用git add <冲突文件>
和git commit -m <message>
来告诉Git冲突已解决
git branch --set-upstream-to=origin/远程分支名
:关联本地分支与远程分支
四、Git标签
git tag -a <标签> [commit_id]
:为当前快照创建一个带注解的标签【历史快照】
git tag
:查看所有标签
git tag -d <标签>
:删除一个标签
git show <标签>
:查看标签对应版本的具体信息
默认情况下,git push
命令不会将本地版本库中的标签上传到远程仓库中,必须显式地推送标签到远程仓库对应分支中:
git push origin 标签名
:推送标签到远程分支
git push origin --tags
:将所有不在远程分支上的标签全部推送
git push origin --delete 标签名
:删除远程标签
五、其他
1、忽略跟踪某些文件
在目录中添加.gitignore
文件即可:
# .gitignore
文件1
文件夹1/
文件2
...
如果提前git commit了则会导致.gitignore失效,解决办法是使用如下命令即可:
git rm --cached -r .