一、GIT常用命令
1、本地操作
# 初始化工作区
git init
# 从远程仓库克隆项目
git clone 仓库地址
# 添加文件/文件夹到缓存(Index)
# . 代表所有文件
# * 代表模糊匹配
git add 文件名
---
# 他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add .
# 他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -u
# 是上面两个功能的合集(git add --all的缩写
git add -A
---
# 添加所有变更文件
git add .
# 添加 指定 文件
git add test01.py test02.py
# 添加 文件名 test 开头的文件
git add test*
# 添加 后缀为 .py 的文件
git add *.py
# 列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交(git commit)的文件
git status
# git status命令可以列出当前目录所有还没有被git管理的文件和被git管理且被修改但还未提交(git commit)的文件.。
# 比如;
git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: 2.txt
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: 1.txt
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# 1.log
# 命令中”Changes to be committed“中所列的内容是在Index中的内容,commit之后进入Git Directory。
# 命令中“Changed but not updated”中所列的内容是在Working Directory中的内容,add之后将进入Index。
# 命令中“Untracked files”中所列的内容是尚未被Git跟踪的内容,add之后进入Index
# 通过git status -uno可以只列出所有已经被git管理的且被修改但没提交的文件。
# 比如:
$ touch 3.txt
$ git add 3.txt
$ git status -uno
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: 1.txt
# new file: 3.txt
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: 2.txt
#
# Untracked files not listed (use -u option to show untracked files)
# 这里1.txt,2.txt两个文件都是曾经被提交过的文件。
# 1.txt被修改且被执行了git add。
# 2.txt被修改但还没被执行了git add。
# 3.txt是新建的文件,已经被执行了git add。
# 另外注意,我们可以通过git add -i 命令查看<path>中被所有修改过或已删除文件但没有提交的文件,它有类似git status的功能。
git commit -m 'fix:变更信息'
# 回溯历史分支
# 历史提交hash值 默认参数为--mixed ; soft和mixed不会修改文件的内容hard会修改文件内容
git reset --[soft|mixed|hard]
# 恢复git提交(HEAD)
git reset --soft
# 恢复git提交和缓存区(HEAD和Index)
git reset --mixed
# 恢复git提交和文件内容(全恢复)
git reset --hard
# 创建一个新的分支(不会切换到新分支)
git branch 分支名称
# 列出远程分支
git branch -r
# 列出本地分支和远程分支
git branch -a
# 重命名分支
git branch -m | -M oldbranch newbranch
# 删除branchname分支
git branch -d | -D branchname
# 删除远程branchname分支
git branch -d -r branchname
# 检出分支
git checkout 分支名称
# 以当前分支为目标复制一个分支(用B参数会强制覆盖已有分支)
git checkout -b[B] 分支名称
# 检出一个完全空白的分支
git checkout --orphan 分支名称
# 更新差异到本地仓库(只更新本地仓库,不影响所有分支代码)
git fetch [数据源] [分支名]
git fetch origin master
# merge合并分支
git merge [数据源]/[分支名]
git merge origin/master
# rebase重定基点
git rebase 目标分支
# 查看Git日志
# 参数 -n number 查看最新n条记录
git log -n 5
2、远程操作
# 配置git参数
# 设置用户名
git config --global user.name "username"
# 设置邮箱
git config --global user.email "email"
# 不带参数,列出已经存在的远程分支
git remote
# 列出详细信息,在每一个名字后面列出其远程url,此时, -v 选项(译注:此为 –verbose 的简写,取首字母),显示对应的克隆地址。
git remote -v | --verbose
# 添加一个远程仓库
git remote add <仓库名称> <仓库地址>
# git更新远程分支列表
# 当主仓库添加分支后,本地仓库找不时,可以尝试同步下远程分支目录到本地。
git remote update origin --prune
# Git 修改远程仓库地址
git remote origin set-url <仓库地址>
# 将本地版本库的分支推送到远程服务器上对应的分支
# 例如 git push origin HEAD:master 把当前分支推送到origin的master分支上
git push 远程仓库名称 本地分支:远程分支
---
# 如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin master
# 如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
git push origin :refs/for/master
# 如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push origin
# 如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名
git push
# 如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push,不带任何参数的git push,
# 默认只推送当前分支,这叫做simple方式,还有一种matching方式,会推送所有有对应的远程分支的本地分支, Git 2.0之前默认使用matching,
# 现在改为simple方式如果想更改设置,可以使用git config命令。
# git config --global push.default matching OR git config --global push.default simple;可以使用git config -l 查看配置
git push -u origin master
# 不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要 -all 选项
git push --all origin
# git push的时候需要本地先git pull更新到跟服务器版本一致,如果本地版本库比远程服务器上的低,那么一般会提示你git pull更新,如果一定要提交,那么可以使用这个命令。
git push --force origin
# git push 的时候不会推送分支,如果一定要推送标签的话那么可以使用这个命令
git push origin --tags
二、基本描述
-
HEAD(头)
- 指向当前branch最顶端的一个commit,该分支上一次commit后的节点
-
Index(索引)
- The index, 也可以被认为是staging area(暂存区),是一堆将在下一次commit中提交的文件,提交之后它就是 HEAD的父节点. (git add添加的文件)
-
Working Copy(工作副本)
- 当前工作目录下的文件,(一般指,有修改,没有git add,没有git commit的文件)