10 Git 指令合集
By Kevin Song
- git config
- git config –global user.name “Your Name”
- git config –global user.email “email@example.com”
- git config –global color.ui true
- git init
- git add
- git commit
- git commit -m “Comments to be added”
- git status
- git diff
- git log
- git log –pretty=oneline
- git reset
- git reset –hard HEAD^
- git reflog
- git checkout
- git checkout – readme.txt
- git reset HEAD file
- ssh-keygen
- git remote
- git remote -v
- git remote add
- git push
- git push origin
- git push origin –tags
- git push origin :refs/tags/
- git clone
- git branch
- git branch name
- git branch -d name
- git branch -D name
- git checkout
- git merge
- git merge –no-ff -m “merge with no-ff”
- git stash
- git stash list
- git stash apply
- git stash drop
- git stash pop
- git tag
- git tag
- git tag commitid
- git tag -a -m “blablabla…” commitid
- git tag -s -m “blablabla…” commitid
git config
- 设置用户名
- 设置邮箱
- 让Git显示颜色
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
$ git config --global color.ui true
- 新建文件夹 mkdir
- 进入文件夹 cd
- 显示当前文件夹 pwd
$ mkdir learngit
$ cd learngit
$ pwd
/d/Git/learngit
git init
把目录变成Git的repository
$ git init
Initialized empty Git repository in D:/Git/learngit/.git/
git add
把文件添加到repository
$ git add readme.txt
git commit
把添加的文件提交到repository
$ git commit -m "wrote a readme file"
[master (root-commit) 2f74cef] wrote a readme file
1 file changed, 2 insertions(+)
create mode 100644 readme.txt
git status
查看仓库有没有被修改
无修改:
$ git status
On branch master
nothing to commit, working directory clean
有修改:
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: readme.txt
no changes added to commit (use "git add" and/or "git commit -a")
git diff
查看文件修改了什么内容
$ git diff readme.txt
diff --git a/readme.txt b/readme.txt
index d8036c1..013b5bc 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,2 +1,2 @@
-Git is a version control system.
+Git is a distributed version control system.
Git is free software.
\ No newline at end of file
git log
查看所有版本
$ git log
commit a9d0c7a4f503c94076a60980657d3198b55cdba3
Author: Kevin Song <songjuntaocn@qq.com>
Date: Thu Oct 12 18:30:17 2017 +0800
append GPL
commit e6d9050da9cdb141c33b865946b38bf3e3a7ad56
Author: Kevin Song <songjuntaocn@qq.com>
Date: Thu Oct 12 18:27:04 2017 +0800
add distributed
commit 2f74cef7a2afece8ce64b5f182850f216e109702
Author: Kevin Song <songjuntaocn@qq.com>
Date: Wed Oct 11 19:04:52 2017 +0800
wrote a readme file
git log –pretty=oneline: 查看简单版本
git reset
版本回退
$ git reset --hard HEAD^
HEAD is now at e6d9050 add distributed
版本向前
$ git reset --hard a9d0c7a4f
HEAD is now at a9d0c7a append GPL
git reflog
查看所有操作
$ git reflog
a9d0c7a HEAD@{0}: reset: moving to a9d0c7a4f
e6d9050 HEAD@{1}: reset: moving to HEAD^
a9d0c7a HEAD@{2}: commit: append GPL
e6d9050 HEAD@{3}: commit: add distributed
2f74cef HEAD@{4}: commit (initial): wrote a readme file
git checkout
把文件在工作区的修改全部撤销
- add 前 修改 后 checkout(文件自修改后还没有被放到暂存区)
- 撤销修改:回到和版本库一样的状态
- (回到上次 git commit 的状态)
- add 后 修改 后 checkout(文件自修改后已经被被放到暂存区)
- 撤销修改:回到添加到暂存区后的状态
- (回到上次 git add 的状态)
1 . 修改文件readme.txt
$ cat readme.txt
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 of files.
My stupid boss still prefers SVN.
2 . 撤销修改
$ git checkout -- readme.txt
3 . 查看文件
$ cat readme.txt
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 of files.
git reset HEAD file
把文件从暂存区退回到工作区
$ git reset HEAD readme.txt
Unstaged changes after reset:
M readme.txt
ssh-keygen
生成SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"
git remote
git remote 查看远程仓库信息
$ git remote
origin
git remote -v 查看详细远程仓库信息
$ git remote -v
origin git@github.com:KevinJtSong/learngit.git (fetch)
origin git@github.com:KevinJtSong/learngit.git (push)
git remote add
添加远程仓库
$ git remote add origin git@github.com:KevinJtSong/learngit.git
git push
第一次推送master分支到远程仓库
$ git push -u origin master
Counting objects: 16, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (16/16), 1.31 KiB | 0 bytes/s, done.
Total 16 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), done.
To git@github.com:KevinJtSong/learngit.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
git push origin
推送tag到远程仓库
$ git push origin v1.0
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:KevinJtSong/learngit.git
* [new tag] v1.0 -> v1.0
git push origin –tags
推送所有tags到远程仓库
$ 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 git@github.com:KevinJtSong/learngit.git
* [new tag] v0.2 -> v0.2
* [new tag] v0.9 -> v0.9
git push origin :refs/tags/
删除远程仓库的tag
$ git push origin :refs/tags/v0.9
To git@github.com:KevinJtSong/learngit.git
- [deleted] v0.9
git clone
从GitHubs克隆远程仓库
$ git clone git@github.com:KevinJtSong/gitskills.git
Cloning into 'gitskills'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
$ cd gitskills
$ ls
README.md
git branch
查看分支
$ git branch
* dev
master
git branch name
创建分支
$ git branch dev
git branch -d name
删除分支
$ git branch -d dev
Deleted branch dev (was fec145a).
git branch -D name
强制删除
$ git branch -D feature-vulcan
Deleted branch feature-vulcan (was 756d4af).
git checkout
切换分支
$ git checkout dev
Switched to branch 'dev'
git merge
合并分支
$ git merge dev
Updating d17efd8..fec145a
Fast-forward
readme.txt | 1 +
1 file changed, 1 insertion(+)
禁用Fast Forward合并
$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
readme.txt | 1 +
1 file changed, 1 insertion(+)
git stash
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查看存储的工作区:
$ git stash list
stash@{0}: WIP on dev: 6224937 add merge
恢复方法一:git stash apply
- stash内容不删除
- git stash drop手动删除
恢复方法二:git stash pop
- stash内容恢复后删除
$ git stash pop
# On branch dev
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: hello.py
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: readme.txt
#
Dropped refs/stash@{0} (f624f8e5f082f2df2bed8a4e09c12fd2943bdd40)
git tag
查看所有标签
$ git tag
v1.0
git tag
创建默认标签
$ git tag v1.0
git tag commitid
$ git tag v0.9 6224937
git tag -a -m “blablabla…” commitid
$ git tag -a v0.1 -m "version 0.1 released" 3628164
git tag -s -m “blablabla…” commitid
$ git tag -s v0.2 -m "signed version 0.2 released" fec145a