常用命令
显示命令帮助
git help <command>
初始化 REPO
在本地新建一个 repo,进入一个项目目录,执行 git init,会初始化一个 repo,并在当前文件夹下创建一个.git文件夹。
git init
添加远程仓储
git remote add origin https://github.com/triple2009/iExt620.git
# 查看远程仓储
$ git remote
origin
$ git remote -v
origin [email protected]:michaelliao/learngit.git (fetch)
origin [email protected]:michaelliao/learngit.git (push)
复制项目
获取远程Git repo 的URL地址,创建一个本地副本。复制下来的 repo 会以 URL 最后一个斜线后面的名称命名,并创建一个文件夹。也可以指定名称。
git clone url
git clone url newname #指定文件夹名称
添加文件
每次修改,如果不add
到暂存区,那就不会加入到commit
中。
# 添加一个文件
git add file1.ext
# 添加多个文件
git add file1.ext file2.ext [...]
# 强制添加文件
$ git add -f App.class
忽略文件
如果 .gitignore
写得有问题,可以用git check-ignore命令检查:
$ git check-ignore -v App.class
.gitignore:3:*.class App.class
Git会告诉我们,.gitignore
的第3行规则忽略了该文件,于是我们就可以知道应该修订哪个规则。
提交变更
本地提交变更。
git commit -m "commit comments"
# -m 后面输入的是本次提交的说明
推送内容
把本地库的内容推送到远程,用git push
命令,实际上是把当前分支master
推送到远程。
git push [-u] origin master
# -u 把本地的master分支和远程的master分支关联起来
关联后,使用命令git push -u origin master
第一次推送master分支的所有内容。此后,每次本地提交后,只要有必要,就可以使用命令git push origin master
推送最新修改。
查询状态
git status
# -s表示short,输出标记会有两列,
# 第一列是对staging区域而言,
# 第二列是对working目录而言。
git status -s
查看提交记录
# 查看该文件每次提交记录
git log git log <file>
# 查看每次详细修改内容的diff
git log -p <file>
# 查看最近两次详细修改内容的diff
git log -p -2
# 查看提交统计信息
git log --stat
# 显示某次提交的内容
git show $id
回退修改
在Git中,用HEAD
表示当前版本,也就是最新的提交3628164...882e1e0
,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
,当然往上100可以写成HEAD~100
。可以使用git reset
命令回退:
# 回退到前一个版本
$ git reset --hard HEAD^
HEAD is now at ea34578 add distributed
# 回退到指定的版本号,版本号(commit id)写几位就可以,git 会自动匹配
$ git reset --hard 3628164
HEAD is now at 3628164 append GPL
查看命令历史
Git提供了一个命令git reflog
用来记录你的每一次命令:
$ git reflog
ea34578 HEAD@{0}: reset: moving to HEAD^
3628164 HEAD@{1}: commit: append GPL
ea34578 HEAD@{2}: commit: add distributed
cb926e7 HEAD@{3}: commit (initial): wrote a readme file
版本差异
用git diff HEAD -- readme.txt
命令可以查看工作区和版本库里面最新版本的区别:
$ git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index 76d770f..a9c5755 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,4 +1,4 @@
Git is a distributed version control system.
Git is free software distributed under the GPL.
Git has a mutable index called stage.
-Git tracks changes.
+Git tracks changes of files.
撤销修改
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销:
$ git checkout -- readme.txt
git checkout -- file
命令中的--
很重要,没有--
,就变成了“切换到另一个分支”的命令。
也可以用命令git reset HEAD file
把暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
删除文件
一般情况下,通常直接在文件管理器中把没用的文件删了,或者用 rm
命令删了:
# 文件管理器删除
$ rm test.txt
# git rm 命令删除
$ git rm test.txt
rm 'test.txt'
$ git commit -m "remove test.txt"
[master d17efd8] remove test.txt
1 file changed, 1 deletion(-)
delete mode 100644 test.txt
分支管理
# 创建 dev 分支,并切换到 dev
$ git checkout -b dev
# 创建 dev 分支
$ git branch dev
# 并切换到 dev 分支
$ git checkout dev
# 列出所有分支,*表示当前分支
$ git branch
* dev
master
# 合并 dev 分支到 master
$ git checkout master
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
# 强制禁用Fast forward模式,Git就会在merge时生成一个新的commit
$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
# 删除 dev 分支
$ git branch -d dev
Deleted branch dev (was fec145a).
# 强行删除分支
$ git branch -D feature-vulcan
Deleted branch feature-vulcan (was 756d4af).
# 查看分支的合并情况
$ git log --graph --pretty=oneline --abbrev-commit
* 59bc1cb conflict fixed
|\
| * 75a857c AND simple
* | 400b400 & simple
|/
* fec145a branch test
...
# 推送分支
$ git push origin master
$ git push origin dev
# 拉取分支
# 创建远程 origin 的 dev 分支到本地,并切换到 dev 分支
$ git checkout -b dev origin/dev
# 设置本地 dev 分支和远程 origin/dev 分支的链接
$ git branch --set-upstream dev origin/dev
# 拉取分支
$ git pull
暂存工作区
Git还提供了一个 stash
功能,可以把当前工作现场“暂存”起来,等以后恢复现场后继续工作:
# 暂存工作区
$ git stash
Saved working directory and index state WIP on dev: 6224937 add merge
HEAD is now at 6224937 add merge
# 查看暂存的工作现场
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
# 恢复暂存的工作现场
git stash apply stash@{0}
# 删除 stash 内容
git stash drop
# 恢复并删除暂存的工作现场
git stash pop
标签管理
在Git中打标签非常简单,需要切换到打标签的分支上。
$ git branch
* dev
master
$ git checkout master
Switched to branch 'master'
# git tag <name>
$ git tag v1.0
# git tag <name> <commit id>
$ git tag v0.9 6224937
# 查看标签列表
$ git tag
v1.0
# 创建带有说明的标签,用 `-a` 指定标签名,`-m` 指定说明文字
$ git tag -a v0.1 -m "version 0.1 released" 3628164
# 查看标签信息
$ git show v0.9
# 删除标签
$ git tag -d v0.1
Deleted tag 'v0.1' (was e078af9)
# 推送某个标签到远程
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To [email protected]:michaelliao/learngit.git
* [new tag] v1.0 -> v1.0
# 一次性推送全部尚未推送到远程的本地标签
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 554 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To [email protected]:michaelliao/learngit.git
* [new tag] v0.2 -> v0.2
* [new tag] v0.9 -> v0.9
# 删除远程标签
# 先删除本地标签
$ git tag -d v0.9
Deleted tag 'v0.9' (was 6224937)
# 删除远程标签
$ git push origin :refs/tags/v0.9
To [email protected]:michaelliao/learngit.git
- [deleted] v0.9