Sourcetree 莫名无法登陆 Atlassian 账号之后,打算尝试用命令行操作 Git,但是用习惯了 GUI,Git 命令都快忘的一干二净了。于是又打开廖雪峰老师的 Git 教程,准备再仔细过一遍。同时结合其他 Git 教程,把 Git 的基本概念、使用再重新梳理一遍。这里就记录一些常用的 Git 命令。
1 2 3 4 5 6
| // 设置全局的用户名和邮箱 $ git config --global user.name "<name>" $ git config --global user.email "<email address>"
// 让 Git 输出语句显示颜色 $ git config --global color.ui true
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| // 创建版本库 $ git init
// 当前 Git 状态 $ git status
// 添加指定文件到暂存区,包括新增和修改 $ git add <file>
// 添加工作区所有修改到暂存区,包括新增、修改、删除 $ git add -A
// 提交暂存区内容到当前分支 $ git commit -m "<descriptive message>"
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| // 工作区和暂存区的不同 $ git diff $ git diff <file>
// 工作区和当前分支的不同 $ git diff HEAD $ git diff HEAD <file>
// 暂存区和当前分支的不同 $ git diff --staged $ git diff --staged <file>
// 查看历史提交记录 $ git log
// 这几个参数的意义:--graph 显示分支合并图,--pretty=oneline 只显示一行简化信息 --abbrev-commit 提交的版本号只显示前面 7 位 $ git log --graph --pretty=oneline --abbrev-commit
// 查看每一次命令 $ git reflog
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| // 回到上一个提交的版本,工作区保持原状 $ git reset HEAD^
// 回到上一个提交的版本,工作区和暂存区都刷新 $ git reset --hard HEAD^
// reset 有三种情况 // --mixed:会影响到暂存区和历史记录区,也是默认选项 // --soft:只影响历史记录区 // --hard:影响工作区、暂存区和历史记录区
// 将工作区修改撤销到上次 add 或者 commit 时的状态,如果文件名和分支名没有冲突 -- 可以省略 $ git checkout -- <file>
// 如果已经添加到暂存区,希望恢复到上次 commit 的状态,可先进行这一步将暂存区内容撤销 $ git reset HEAD <file>
|
1 2 3 4 5
| // 如果文件被删除,这个命令将这个改变添加到暂存区 $ git rm <file>
// 将暂存区中这个文件删除 $ git rm --cached <file>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| // 为本地已有仓库添加远程仓库,远程仓库名为 origin (一个仓库可以添加多个远程仓库) $ git remote add origin git@github.com:michaelliao/learngit.git
// 查看远程仓库 $ git remote
// 查看远程仓库详细信息,可以查看是否有 push 权限 git remote -v
// 将 master 分支推送到远程仓库 origin $ git push origin master // 将 dev 分支推送到远程仓库 origin $ git push origin dev
// 第一次推送时,使用 -u 可以把本地的 master 分支和远程的 master 分支关联起来,以后就可以省略 $ git push -u origin master
// 将一个远程仓库复制到本地 $ git clone <url>
// 删除一个关联的远程仓库 $ git remote remove origin
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| // 查看分支 $ git branch
// 新建分支 $ git branch <branch-name>
// 切换到分支 $ git checkout <branch-name> // 切换到分支(新) $ git switch master
// 新建并切换到分支 $ git checkout -b <branch-name> // 新建并切换到分支(新) $ git switch -c dev
// 将指定分支合并到当前分支 $ git merge <branch-name>
// 变基(主要用于将公共分支的变更合并的 feature 分支) $ git rebase <branch-name>
// 删除指定分支 $ git branch -d <branch-name>
// 如果 dev 分支修改过程中,master 分支从没有修改过,那么 Git 默认会使用 Fast forward 模式合并,不会产生新的 commit,而是直接把 master 的指针指向 dev 分支最后的 commit 上,我们并不会在分支历史中看到分支信息,如果一定要看到,可以指定非 Fast forward 模式合并,这种模式合并,一定会新产生一个 commit // 使用非 Fast forward 模式合并,附带 commit 的信息 $ git merge --no-ff -m "merge with no-ff" dev
// 强行删除指定分支,即使其还没有合并到主分支 $ git branch -D feature-vulcan
// 从远程仓库拉去 dev 分支到本地 $ git checkout -b dev origin/dev
// 将当前分支远程仓库最新的内容拉取下来 $ git pull
// 更改远程分区的 HEAD 到 develop 分支 git remote set-head origin develop
// 将本地的 dev 分支与远端的 dev 分支做关联(?) $ git branch --set-upstream-to=origin/dev dev // 推送本地新建的 dev 分支到远端 git push --set-upstream origin dev
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| (本段摘自廖雪峰 Git 教程) 多人协作的工作模式通常是这样:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!
// 这部分不一定对,有的已经废弃了 如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to=origin/dev dev。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| // 暂时缓存当前工作区 $ git stash
// 查看 stash 列表 $ git stash list
// 恢复 stash 内容,但是 stash 并不删除 $ git stash apply stash@{0}
// 删除 stash 内容 $ git stash drop
// 恢复 stash 最近的内容,并删除 $ git stash pop
// 将某个提交的变化复制到当前分支 $ git cherry-pick 4c805e2
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| // 查看所有标签 $ git tag
// 为当前分支最新提交打上标签 $ git tag v1.0
// 为历史提交中的某次提交打上标签 $ git tag v0.9 <commit id>
// 查看指定标签的信息 $ git show <tag name>
// 创建标签的过程中添加标签的说明 $ git tag -a v0.1 -m "version 0.1 released" 3628164
// 删除指定标签 $ git tag -d <tag name>
// 推送一个本地标签 $ git push origin <tag name>
// 推送全部未推送过的本地标签 $ git push origin --tags
// 删除一个远程标签 $ git push origin :refs/tags/<tag name>
|
1 2 3 4 5 6 7 8
| // 给常用 Git 命令设置别名,以快捷输入,这个依然是保存在家目录的 .gitconfig 文件中 $ git config --global alias.st status $ git config --global alias.co checkout $ git config --global alias.ci commit $ git config --global alias.br branch $ git config --global alias.unstage 'reset HEAD' $ git config --global alias.last 'log -1' $ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
|
链接:
廖雪峰的 Git 教程:Git 入门最好的教程。
Git Flow:Git Flow 的原文,里面的图片一目了然。
GitHub Git Cheat Sheet:各种 Git 基本操作的命令。
工作流一目了然,看小姐姐用动图展示 10 大 Git 命令:一些 Git 操作的动图解释。
面试中的那些 Git 问题 - 基础部分