r3f.cn
GitHub Repo stars

Git

这份速查表总结了常用的 Git 命令行指令,以便快速参考。

#入门

#创建仓库

创建一个新的本地仓库

$ git init [项目名称]

克隆一个仓库

$ git clone git_url

将仓库克隆到指定目录

$ git clone git_url my_directory

#进行更改

显示工作目录中已修改的文件,这些文件已暂存,准备进行下一次提交

$ git status

暂存文件,准备提交

$ git add [file]

暂存所有已更改的文件,准备提交

$ git add .

将所有暂存的文件提交到版本历史

$ git commit -m "提交信息"

将所有已跟踪的文件提交到版本历史

$ git commit -am "提交信息"

丢弃工作目录中未暂存的更改

$ git restore [file]

取消暂存一个已暂存的文件

$ git restore --staged [file]

取消暂存文件,保留文件更改

$ git reset [file]

将所有内容还原到最后一次提交

$ git reset --hard

显示已更改但未暂存的内容的差异

$ git diff

显示已暂存但尚未提交的内容的差异

$ git diff --staged

应用当前分支中领先于指定分支的任何提交

$ git rebase [branch]

#配置

设置将附加到您的提交和标签的名称

$ git config --global user.name "名称"

设置将附加到您的提交和标签的电子邮件地址

$ git config --global user.email "邮箱"

启用 Git 输出的一些颜色化

$ git config --global color.ui auto

在文本编辑器中编辑全局配置文件

$ git config --global --edit

#使用分支

列出所有本地分支

$ git branch

列出所有分支,包括本地和远程

$ git branch -av

切换到 my_branch 分支,并更新工作目录

$ git checkout my_branch

创建一个名为 new_branch 的新分支

$ git checkout -b new_branch

删除名为 my_branch 的分支

$ git branch -d my_branch

将 branchA 合并到 branchB

$ git checkout branchB
$ git merge branchA

标记当前提交

$ git tag my_tag

#查看您的仓库

显示当前活动分支的提交历史

$ git log

显示 branchA 上但不在 branchB 上的提交

$ git log branchB..branchA

显示更改了文件的提交,即使文件被重命名

$ git log --follow [file]

显示 branchA 中存在但 branchB 中不存在的内容的差异

$ git diff branchB...branchA

以人类可读的格式显示 Git 中的任何对象

$ git show [SHA]

#同步

从该 Git 远程仓库获取所有分支

$ git fetch [alias]

将远程分支合并到当前分支以使其保持最新

$ git merge [alias]/[branch]
# 不快进合并
$ git merge --no-ff [alias]/[branch]
# 仅快进合并
$ git merge --ff-only [alias]/[branch]

将本地分支的提交传输到远程仓库分支

$ git push [alias] [branch]

从跟踪的远程分支获取并合并任何提交

$ git pull

仅将另一个分支的特定提交合并到当前分支

$ git cherry-pick [commit_id]

#远程

添加一个 git URL 作为别名

$ git remote add [alias] [url]

显示您已设置的远程仓库的名称

$ git remote

显示远程仓库的名称和 URL

$ git remote -v

移除一个远程仓库

$ git remote rm [remote repo name]

更改 git 仓库的 URL

$ git remote set-url origin [git_url]

#临时提交

保存已修改和已暂存的更改

$ git stash

列出已储藏文件更改的堆栈顺序

$ git stash list

从储藏堆栈顶部恢复工作

$ git stash pop

丢弃储藏堆栈顶部的更改

$ git stash drop

#跟踪路径更改

从项目中删除文件并将删除操作暂存以供提交

$ git rm [file]

更改现有文件路径并将移动操作暂存

$ git mv [existing-path] [new-path]

显示所有提交日志,并指示任何已移动的路径

$ git log --stat -M

#忽略文件

/logs/*

# "!" 表示不要忽略
!logs/.gitkeep

/# 忽略 Mac 系统文件
.DS_store

# 忽略 node_modules 文件夹
node_modules

# 忽略 SASS 配置文件
.sass-cache

.gitignore 文件指定了 Git 应该忽略的、有意不跟踪的文件。

#Git 技巧

#重命名分支

  • #重命名new_name

    $ git branch -m <new_name>
    
  • #推送并重置上游

    $ git push origin -u <new_name>
    
  • #删除远程分支

    $ git push origin --delete <old>
    

#日志

按内容搜索更改

$ git log -S'<源中的术语>'

显示特定文件随时间的变化

$ git log -p <file_name>

打印出酷炫的日志可视化效果

$ git log --pretty=oneline --graph --decorate --all

#分支

列出所有分支及其上游分支

$ git branch -vv

快速切换到上一个分支

$ git checkout -

仅获取远程分支

$ git branch -r

从另一个分支检出单个文件

$ git checkout <branch> -- <file>

#改写历史

改写最后一次提交信息

$ git commit --amend -m "新信息"

修改最新的提交,但不更改提交信息。

$ git commit --amend --no-edit

另请参阅:改写历史

#Git 别名

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

另请参阅:更多别名

#高级 Git

#子模块

在您的仓库中创建一个新的子模块:

$ git submodule add <repository_url> <path>

克隆一个仓库并初始化其子模块:

$ git clone --recursive <repository_url>

将仓库中的所有子模块更新到其各自自分支的最新提交:

$ git submodule update

从子模块的远程仓库拉取最新更改并在主仓库中更新它们:

$ git submodule update --remote

从您的仓库中移除一个子模块:

$ git submodule deinit <path>
$ git rm <path>
$ git commit -m "移除了子模块"

#遴选 (Cherry-picking)

遴选允许您将一个分支的特定提交应用到另一个分支。

$ git cherry-pick <commit_hash>

#Reflog

显示 reflog,展示 HEAD 和分支移动的历史记录:

$ git reflog

使用 reflog 找到丢失的提交或分支的哈希值,然后检出到该哈希值以恢复它:

$ git checkout <commit_or_branch_hash>