这篇文章的目的是给经常使用git管理项目提供一个有益的提醒。如果你是git新手,可以先阅读文后的引用部分,然后在回头阅读此篇文章。在介绍git命令之前,你可以先看看来自 on-my-zsh 提供的别名。
基本命令
-
git config --global user.name "Your Name"
-
git config --global user.email "[email protected]"
-
git config --global core.editor <your favorite editor here>
- Ex:
git config --global core.editor vim
- Ex:
-
:初始化一个repo。git init
Commit 结构
-
(git status
):查看 repo 状态gst
- 工作区:
- .git 目录
- 暂存区
- 工作目录
-
git add <filename>
):添加一个文件到暂存区ga
-
git add .
):添加所有文件到暂存区gaa
-
:添加所有后缀为js的文件到暂存区git add *.js
-
:从暂存区删除一个新文件git rm --cached <file>
-
git commit -m "My first commit"
):创建一次带 message 的提交gcmsg
-
git commit -v -a
):gca
-
是 verbose 的缩写,会在底部显示差异信息和更多有意义的信息-v
-
类似于-a
,会添加所有被修改和删除的文件,但会忽略新创建的文件git add .
-
-
:查看对应命令的帮助手册git help <command>
-
git log
,glg
glgg
glo
):查看项目的提交历史glog
暂存区管理
-
git reset HEAD <filename>
):从暂存区删除一个被修改的文件grh
-
git reset HEAD
):从暂存区删除所有被修改的文件grh
-
git checkout <filename>
):从暂存区删除一个被修改的文件,并撤销文件的更改gco
-
:添加文件/更改在暂存区的最后一次提交git commit -m "My first commit" --amend
-
git commit -v -a --amend
):添加文件/更改在暂存区的最后一次提交gca!
-
:告诉git,哪些文件不被加入版本跟踪.gitignore
- 可以使用
命令添加一个不被版本跟踪的文件git add <filename> -f
- 可以使用
-
git diff <filename>
):查看基于当前文件的最后一次提交的更改差异gd
-
git diff
):查看基于所有文件的最后一次提交的更改差异gd
-
:从项目提交历史中删除最近两次提交,但不丢弃文件的更改git reset HEAD~2 --soft
-
:从项目提交历史中删除最近两次提交,但会丢弃文件的更改和在(最后两次)提交中创建的新文件git reset HEAD~2 --hard
-
:git reset <commit> --soft --hard
-
:将所有被更改的文件回溯到“待提交”状态--soft
-
:--hard
之后,对被git追踪的文件的任何更改都被丢弃commit
-
-
:显示包括 被撤销 在内的所有提交git reflog
-
:重新提交(restore the commit)git merge <commit hash>
-
:删除工作目录中不被git进行版本追踪的文件git clean -f
Stashed & Branches
Stash
-
git stash
):将所有暂存区的文件移动到“储藏区”,类似于另一种类型的工作区gsta
-
:查看储藏队列(Stash lists)git stash list
-
:将最近一次储藏恢复到暂存区(可以用类似git stash apply
(num从0开始计数) 的命令来使用在队列中的任意一个储藏(stashes))git stash apply stash@{num}
-
:清空储藏队列git stash clear
-
:为储藏设置命名git stash save "name of the stash"
-
git stash pop
):将最近一次储藏恢复到暂存区并从储藏队列删除此储藏gstp
-
git stash drop
):从储藏队列删除最近一次储藏(gstd
)(stash@{0}
从储藏队列删除指定储藏)git stash drop stash@{num}
Branch
-
git checkout -b dev
):创建 dev 分支并从当前分支切换到 dev 分支gco
-
git branch
):查看所有分支gb
-
git checkout master
):切换到主分支gcm
-
git merge <branch>
):合并分支gm
-
:先将 master 上的更改合并到当前分支,再添加当前分支的更改。如果有冲突,解决冲突后加git rebase master
参数继续合并--continue
-
: 删除分支,git branch -d <branch>
则强制删除分支-D
-
:将多次提交合并成一个,其流程如下:git merge <branch> --squash
# Go to the `master` branch
git checkout master
# Create a temp branch
git checkout -b temp
# Merge the feature/x branch into the temp using --squash
git merge feature/x --squash
# See the new modifications/files in the Staging Area
git status
# Create the unified commit
git commit -m "Add feature/x"
# Delete the feature/x branch
git branch -D feature/x
- rebase 和 merge 的区别:
- rebase:
- 提交历史(的展示)是线性的
- 缺点:会删除最近一个 commit,然后创建一次新的 commit
- 如果已提交到远程,不要使用 rebase
- merge:
- 提交历史(的展示)是分叉的
- 对于两个分支的合并,会创建一个次新的 commit
- rebase:
远程仓库管理
-
:添加一个将被追踪的远程仓库git remote add <name> <url>
-
:移除一个远程仓库git remote rm <name>
-
git push <remote> <remote-branch>
gp
):将当前分支的本地 commit 推送到远程仓库ggp
-
:拉取远程仓库的最新 commit 到当前(本地)分支(git fetch <remote> <remote-branch>
),不会合并<remote>/<branch>
-
git pull <remote> <remote-branch>
gl
):拉取远程仓库的最新 commit 到当前(本地)分支,并自动 mergeggl
-
git pull --rebase
):以 rebase 的方式进行合并,而不是 mergegup
-
其它有用的命令
-
:创建一个 tag(如:v1.3)git tag <name>
-
:将本地 tags 推送到远程仓库git push --tags
-
:推送指定的本地 tag 到远程git push <tag>
熬夜不易,点击请老王喝杯烈酒!!!!!!!