常用命令

显示命令帮助

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

results matching ""

    No results matching ""