【笔记】Git学习笔记

前言

git是一个分布式版本控制软件,最初由林纳斯·托瓦兹创作,于2005年以GPL发布。最初目的是为更好地管理Linux内核开发而设计。应注意的是,这与GNU Interactive Tools(一个类似Norton Commander界面的文件管理器)不同。(维基百科

安装

1
brew install git

配置文件

~/.gitconfig
1
2
3
[user]
name = <name>
email = <email>

全局配置

查看所有配置

1
git config --list

配置身份

统一配置

--global:全局配置

1
git config --edit

单独配置

配置用户名

<username>:用户名

--global:全局配置

1
git config user.name "<username>"
配置邮箱

<email>:邮箱

--global:全局配置

1
git config user.email "<email>"

配置别名

  • git <command>改为使用git <alias>

--global:全局配置

1
git config alias.<alias> <command>
1
git <alias>

配置拉取策略

--global:全局配置

1
git config pull.rebase false
1
git config pull.rebase true
1
git config pull.ff only

配置推送策略

simple:缺省值,推送当前分支到上游同名分支,如果没有则不推送
upstream:推送当前分支到上游同名分支,如果没有则创建
current:推送当前分支到远程同名分支

1
git config push.default upstream

重置用户名密码信息

1
git config --system --unset credential.helper

初始化仓库

1
git init

追踪文件

  • 将指定文件从工作区添加到暂存区
1
git add <file>
  • 将指定目录及其所有子目录的所有文件从工作区添加到暂存区
1
git add <dir>

追踪所有文件

  • 将当前目录及其子目录下的所有文件从工作区添加到暂存区
1
git add .
1
git add -A

提交

  • 将暂存区的所有文件提交到本地仓库,并产生一个新的提交记录,HEAD指针会移动到这个提交记录上
  • 通过默认编辑器修改提交备注
1
git commit

快速提交

<text>:需要提交的备注内容

1
git commit -m "<text>"

直接提交

1
git commit -a

直接快速提交

1
git commit -a -m "<text>"

克隆

  • 首次将所有文件从远程仓库直接克隆到本地仓库(当前目录下)

<git>:远程仓库地址
-b <branch>:指定分支,直接克隆指定分支,而不是主分支

1
git clone <git>

<dir>:指定新的目录名,缺省值为仓库名

1
git clone <git> <dir>

推送

  • 将本地仓库更新到远程仓库

-f:强制提交
--tags:包含标签

1
git push
1
git push <remote_name> <remote_branch_name>
1
git push <remote_name> <local_branch_name>:<remote_branch_name>

删除远程分支

1
git push <remote_name> --delete <remote_branch_name>

删除远程标签

1
git push <remote_name> --delete <remote_tag_name>

推送时设置上游分支

1
git push --set-upstream <remote_name> <remote_branch_name>

拉取

  • 从远程仓库更新到本地仓库,并合并远程仓库的分支到本地仓库的分支
1
git pull
  • 相当于先从远程仓库更新本地仓库(git fetch),再合并本地仓库的分支到本地仓库的分支(git merge
1
2
git fetch
git merge

拉取时指定策略

1
git pull --rebase
1
git pull --no-rebase
1
git pull --ff-only

获取

  • 从远程仓库更新本地仓库
1
git fetch
1
git fetch <remote_name> <remote_branch_name>

标签

  • 标签是一种不会移动的指针

查看标签

查看全部标签

1
git tag

查看指定标签

1
git show <tag_name>

创建标签

  • 在提交之后可以为当前提交创建标签
1
git tag <tag_name>
1
git tag -a <tag_name> -m <text>

删除标签

1
git tag -d <tag_name>

分支

  • 分支是一种特殊的标签

查看分支

--set-upstream-to=<remote_name>/<remote_branch_name>:设置上游分支
-v:查看最后一次的提交信息
--merged:查看所有已经合并到当前分支的分支
--no-merged:查看所有未合并到当前分支的分支

1
git branch

创建分支

--set-upstream-to=<remote_name>/<remote_branch_name>:设置上游分支

1
git branch <branch_name>

删除分支

1
git branch -d <branch_name>

强制删除分支

1
git branch -D <branch_name>

重命名分支

1
git branch -M <branch_name>

合并分支

  • 合并指定分支到当前分支

--allow-unrelated-histories:允许不相关的历史

1
git merge <branch_name>
  • 从上游分支上合并
1
git merge
1
git merge <remote_name>/<remote_branch_name>

变基分支

  • 变基指定分支到当前分支
1
git rebase <branch_name>

切换

切换分支

--track <remote_name>/<remote_branch_name>:设置上游分支
-b:创建并切换新分支

1
git checkout <branch_name>

-c:创建新分支

1
git switch <branch_name>

切换标签

1
git checkout <tag_name>

远程仓库

  • 远程仓库会映射为一个特殊的本地仓库

查看关联的远程仓库

  • 一个本地仓库可以有多个远程仓库

-v--verbose:显示远程仓库地址

1
git remote

查看关联的远程仓库和分支

1
git ls-remote

添加关联的远程仓库

<remote_name>:远程仓库映射到本地仓库的仓库名称,默认为origin
<url>:远程仓库地址

1
git remote add <remote_name> <url>

删除关联的远程仓库

1
git remote rm origin

修改关联的远程仓库

1
git remote set-url <remote_name> <url>

提交日志

查看提交日志

--graph:渲染分支
--pretty=oneline:每条提交只显示一行

1
git log

查看完整提交日志

1
git reflog

查看提交状态

-s--short:简短的

1
git status

重置HEAD位置

  • 每有一个尖号(^),表示上一级父提交
1
git reset --hard HEAD^
  • 指定父提交次数
1
git reset --hard HEAD~<num>
  • 指定提交哈希值
1
git reset --hard <hash>

完成

参考文献

CSDN——成长中de大神
CSDN——云胡不喜?
博客园——ChuckLu
CSDN——AdleyTales
CSDN——halo1416