首页 > 其他 > 详细

Git学习笔记

时间:2018-12-26 10:08:06      阅读:185      评论:0      收藏:0      [点我收藏+]

目录

本文更新于2018-12-25,使用git 2.19.0,操作系统为Windows 10。

官方中文文档:https://git-scm.com/book/zh/v2

基本概念

git文件可能处于三种状态之一:已修改(modified)、已暂存(staged)和已提交(committed)。

工作目录下的每一个文件都处于两种状态之一:已跟踪或未跟踪。 已跟踪是指那些被纳入了版本控制的文件,在上一次快照中有它们的记录,在工作一段时间后,它们的状态可能处于未修改,已修改或已暂存。 工作目录中除已跟踪文件以外的所有其它文件都属于未跟踪文件,它们既不存在于上次快照的记录中,也没有放入暂存区。

下文中的.目录均为工作目录,命令均在工作目录下执行。

配置文件

Linux配置文件读取顺序:

  1. /etc/gitconfig
  2. ~/.gitconfig或~/.config/git/config
  3. .git/config

Windows配置文件读取顺序:

  1. C:/Users/$USER/.gitconfig
  2. .git/config

.gitignore

配置忽略跟踪的文件列表。

  • 以#开头的行是注释。
  • 使用glob模式匹配的文件,均忽略跟踪。
    • *匹配零个或多个任意字符。
    • [abc]匹配列表中任意一个字符。
    • ?匹配任意一个字符。
    • [a-z]匹配范围内任意一个字符。
    • **匹配任意中间目录。
  • 以/开头指定在工作目录中的相对路径,并忽略跟踪。
  • 以/结尾指定目录,并忽略跟踪。
  • 在模式前加!,可只跟踪该模式,忽略模式以外的文件。

命令

git add

将文件放入暂存区。可以跟踪新文件,暂存已修改文件,合并时将冲突标记为已解决。如指定目录,则暂存目录下的所有文件。

git add <file>

git branch

查看所有分支。使用-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

使用暂存区文件撤销工作目录文件的修改。

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

克隆仓库。如没有指定目标目录,则会在当前目录下以源路径最后一个目录名为目标目录。目标目录必须为空目录。

git clone <src> [<dst>]

git config

设置配置。

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

将暂存区提交。

git commit [-m <msg>]

将已跟踪过的文件暂存并提交。

git commit -a [-m <msg>]

撤销上一次提交,重新提交。

git commit --amend

git diff

比较工作目录和暂存区的差异。

git diff

比较暂存区和已提交的差异。

git diff --staged|--cached

git fetch

从远程仓库拉取。不会自动合并分支。

git fetch [<remote>]

拉取所有远程仓库。

git fetch --all

git help

查看帮助。

git help <verb>
git <verb> --help
man git-<verb>

git init

在当前目录初始化仓库。目录中可以存在文件。远程仓库最好使用--bare参数初始化,且之后仓库不能作为工作目录。

git init [--bare]

git log

查看提交历史。

git log [<branch> ...]

可使用如下选项:

  • -p:显示每次提交的内容差异。
  • --stat:显示每次提交的简略的统计信息。
  • --shortstat:只显示--stat中最后的行数修改添加移除统计。
  • --name-only:仅在提交信息后显示已修改的文件清单。
  • --name-status:显示新增、修改、删除的文件清单。
  • --abbrev-commit:仅显示SHA-1的前几个字符,而非所有的40个字符。
  • --relative-date:使用较短的相对时间显示(比如,“2 weeks ago”)。
  • --pretty=oneline|format:"
  • --oneline:每次提交信息单行显示,类似--pretty=oneline。
  • --graph:使用ASCII图表展示分支,需与--pretty=oneline|format结合使用。
  • --decorate:查看各个分支当前所指的对象。
  • --all:显示所有分支的提交信息。
  • -(n):最近n次提交。
  • --since|--after <time>:显示指定时间之后的提交。
  • --until|--before <time>:显示指定时间之前的提交。
  • --author <auther>:显示指定作者相关的提交。
  • --committer <comitter>:显示指定提交者相关的提交。
  • --grep <word>:显示提交说明中含指定关键字的提交。
  • -S <word>:显示提交内容中含指定关键字的提交。
  • -- <path>:放在最后位置上,指定文件路径。
  • --all-match:显示同时满足这所有选项搜索条件的提交,不带此选项则显示满足任意一个搜索条件的提交。

常用命令。

  • 查看分支历史图表:git log --oneline --graph --all

git ls-remote

查看远程引用完整列表。

git ls-remote [<remote>]

git merge

合并分支。将分支合并到当前分支。

git merge <branch>

中断合并。

git merge --abort

如有合并冲突,需使用git mergetool解决。

git mergetool

可视化合并冲突解决。

git mergetool

使用kdiff3合并:A(Base)为共同祖先;B(Local)为当前分支;C(Remote)为待合入的分支;Ouput为合并结果。合并成功后,会保存冲突文件为

合并冲突解决后,需使用git commit提交。

git mv

移动文件。

git mv <from> <to>

git pull

从远程仓库拉取。会自动合并到跟踪分支。通常单独显式地使用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

推送到远程仓库。并不会推送标签。

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

不要对在你的仓库外有副本的分支执行变基。变基操作的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。

变基。将当前分支的指针指向目标基底分支,并应用当前分支相较于最近共同祖先的修改。一般这样做的目的是为了向远程分支推送时保持提交历史的整洁。

git rebase <branch>

将特性分支topicbranch变基到目标基底分支basebranch。

git rebase <basebranch> <topicbranch>

取出branch3分支,找出branch3和branch2共同祖先之后的修改,然后在branch1分支上重放。

git rebase --onto <branch1> <branch2> <branch3>

git remote

查看本地仓库的远程仓库信息。

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

从暂存区移除跟踪文件,回到已修改状态。

git reset HEAD <file>[ ...]

将暂存区和工作目录恢复到上一次提交。

git reset --hard [HEAD]

git rm

从暂存区移除跟踪文件,并从工作目录删除文件。若文件已修改且已放入暂存区,则需要使用-f。

git rm [-f] <file>

只从暂存区移除跟踪文件,不从工作目录删除文件。

git rm --cached <file>

git show

查看标签对应的提交信息。

git show <tag>

git status

查看当前文件状态。使用-s或--short可查看简短的输出。

git status
git status -s|--short

输出含义如下:

  • ??:未跟踪。
  • A:新跟踪到暂存区。
  • 右M:已修改但未放入暂存区。
  • M左:已修改并放入暂存区。

git tag

查看已有的标签,包括附注标签和轻量标签。以字母顺序列出。

git tag [-l <glob>]

创建附注标签(annotated)。指定校验和或校验和前缀,可对指定的提交创建标签。

git tag -a <tag> -m <msg> [<hash>]

创建轻量标签(lightweight)。指定校验和或校验和前缀,可对指定的提交创建标签。

git tag <tag> [<hash>]

常用流程

本地仓库提交流程。

  1. git init|clone
  2. git add|mv|rm|reset|checkout
  3. git commit

远程仓库提交流程。

  1. git remote
  2. git pull|fetch|checkout|merge
  3. git push

分支合并流程。

  1. git branch
  2. git checkout
  3. git merge
  4. git mergetool
  5. git add
  6. git commit

Git学习笔记

原文:https://www.cnblogs.com/garvenc/p/git_learning.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!