目录
本文更新于2018-12-25,使用git 2.19.0,操作系统为Windows 10。
官方中文文档:https://git-scm.com/book/zh/v2。
git文件可能处于三种状态之一:已修改(modified)、已暂存(staged)和已提交(committed)。
工作目录下的每一个文件都处于两种状态之一:已跟踪或未跟踪。 已跟踪是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已暂存。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。
下文中的.目录均为工作目录,命令均在工作目录下执行。
Linux配置文件读取顺序:
Windows配置文件读取顺序:
配置忽略跟踪的文件列表。
将文件放入暂存区。可以跟踪新文件,暂存已修改文件,合并时将冲突标记为已解决。如指定目录,则暂存目录下的所有文件。
git add <file>
查看所有分支。使用-v参数可查看每一个分支的最后一次提交。使用-vv参数可查看所有跟踪分支。
git branch
git branch -v
git branch -vv
查看已合并到当前分支的分支。
git branch --merged
查看未合并到当前分支的分支。
git branch --no-merged
创建分支。不会切换到新分支。
git branch <branch>
删除分支。
git branch -d <branch>
强制删除分支。如果分支包含未合并的提交,则会将其丢弃。
git branch -D <branch>
设置当前的本地分支跟踪拉取下来的远程分支,或者修改正在跟踪的上游分支。当设置好跟踪分支后,可以通过@{upstream}
或@{u}
快捷方式来引用它。
git branch -u <remote>/<branch>
git branch --set-upstream-to <remote>/<branch>
使用暂存区文件撤销工作目录文件的修改。
git checkout -- <file>...
切换分支。
git checkout <branch>
切换工作目录至指定的标签或提交。
git checkout <tag>|<sha1>
创建并切换分支。
git checkout -b <branch>
在指定的标签上创建分支。
git checkout -b <branch> <tag>
建立远程分支的跟踪分支。跟踪分支的起点为远程分支。
git checkout -b <branch> <remote>/<branch>
git checkout --track <remote>/<branch>
克隆仓库。如没有指定目标目录,则会在当前目录下以源路径最后一个目录名为目标目录。目标目录必须为空目录。
git clone <src> [<dst>]
设置配置。
git config [--global] alias.<alias> <source>
git config --bool core.bare true
git config [--global] core.editor <editor>
git config [--global] user.name <name>
git config [--global] user.email <email>
git config [--global] pull.rebase true
使用alias设置别名时,如果是外部命令,则于前面加!。
查看配置。
git config --list
git config <key>
将暂存区提交。
git commit [-m <msg>]
将已跟踪过的文件暂存并提交。
git commit -a [-m <msg>]
撤销上一次提交,重新提交。
git commit --amend
比较工作目录和暂存区的差异。
git diff
比较暂存区和已提交的差异。
git diff --staged|--cached
从远程仓库拉取。不会自动合并分支。
git fetch [<remote>]
拉取所有远程仓库。
git fetch --all
查看帮助。
git help <verb>
git <verb> --help
man git-<verb>
在当前目录初始化仓库。目录中可以存在文件。远程仓库最好使用--bare参数初始化,且之后仓库不能作为工作目录。
git init [--bare]
查看提交历史。
git log [<branch> ...]
可使用如下选项:
常用命令。
查看远程引用完整列表。
git ls-remote [<remote>]
合并分支。将分支合并到当前分支。
git merge <branch>
中断合并。
git merge --abort
如有合并冲突,需使用git mergetool
解决。
可视化合并冲突解决。
git mergetool
使用kdiff3合并:A(Base)为共同祖先;B(Local)为当前分支;C(Remote)为待合入的分支;Ouput为合并结果。合并成功后,会保存冲突文件为
合并冲突解决后,需使用git commit
提交。
移动文件。
git mv <from> <to>
从远程仓库拉取。会自动合并到跟踪分支。通常单独显式地使用fetch与merge命令会更好一些。
git pull [--rebase] [<remote> [<branch>]]
git pull --allow-unrelated-histories [<remote> [<branch>]]
当本地仓库和远程仓库是两个独立的仓库时,会出现错误:fatal: refusing to merge unrelated histories,此时需加上参数--allow-unrelated-histories
。
推送到远程仓库。并不会推送标签。
git push [<remote>] [<branch>|<Local-branch>:<remote-branch>]
如出现如下错误,则在远程仓库执行git config --bool core.bare true
。
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
推送标签到远程仓库。
git push <remote> <tag>
git push <remote> --tags
删除远程分支。
git push <remote> --delete <branch>
不要对在你的仓库外有副本的分支执行变基。变基操作的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。
变基。将当前分支的指针指向目标基底分支,并应用当前分支相较于最近共同祖先的修改。一般这样做的目的是为了向远程分支推送时保持提交历史的整洁。
git rebase <branch>
将特性分支topicbranch变基到目标基底分支basebranch。
git rebase <basebranch> <topicbranch>
取出branch3分支,找出branch3和branch2共同祖先之后的修改,然后在branch1分支上重放。
git rebase --onto <branch1> <branch2> <branch3>
查看本地仓库的远程仓库信息。
git remote [-v]
git remote show <remote>
添加远程仓库。
git remote add <shortname> <url>
重命名远程仓库。
git remote rename <old-name> <new-name>
移除远程仓库。
git remote rm <remote>
从暂存区移除跟踪文件,回到已修改状态。
git reset HEAD <file>[ ...]
将暂存区和工作目录恢复到上一次提交。
git reset --hard [HEAD]
从暂存区移除跟踪文件,并从工作目录删除文件。若文件已修改且已放入暂存区,则需要使用-f。
git rm [-f] <file>
只从暂存区移除跟踪文件,不从工作目录删除文件。
git rm --cached <file>
查看标签对应的提交信息。
git show <tag>
查看当前文件状态。使用-s或--short可查看简短的输出。
git status
git status -s|--short
输出含义如下:
查看已有的标签,包括附注标签和轻量标签。以字母顺序列出。
git tag [-l <glob>]
创建附注标签(annotated)。指定校验和或校验和前缀,可对指定的提交创建标签。
git tag -a <tag> -m <msg> [<hash>]
创建轻量标签(lightweight)。指定校验和或校验和前缀,可对指定的提交创建标签。
git tag <tag> [<hash>]
本地仓库提交流程。
远程仓库提交流程。
分支合并流程。
原文:https://www.cnblogs.com/garvenc/p/git_learning.html