2019-05-20笔记:GIT教程

安装后配置

$ git config --global user.name 'Your Name'

$ git config --global user.email 'email@example.com'

创建 GIT 仓库

$ git init

将文件添加到仓库

$ git add reame.txt

强制添加忽略文件

$ git add -f thumbnail_100X100.jpg

将文件提交到仓库

$ git commit -m 'readme.txt

补充:-m参数后输入本次提交的备注

查看仓库状态

$ git status

# 位于分支 master
# 尚未暂存以备提交的变更:
#   (使用 "git add <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#	修改:      readme.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a"

查看修改内容

$ git diff

diff --git a/readme.txt b/readme.txt
index 46d49bf..9247db6 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.
 
 # 查看工作区和版本库的区别
 $ git diff HEAD -- readme.txt
 
diff --git a/readme.txt b/readme.txt
index 0d0c611..f688d0e 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 call stage.
-Git tracks changes.
+Git tracks changes of files.

查看历史记录

$ git log

commit eb62f41107873633bba865bc25080f69f376fa83
Author: dust <1036605035@qq.com>
Date:   Sun May 19 16:09:25 2019 +0800

    append GPL

commit 7807e3424a4f1a253b45329475e6633a63b7b039
Author: dust <1036605035@qq.com>
Date:   Sun May 19 16:07:28 2019 +0800

    add distributed

commit e4343ddd14c7daddcc7fc60557065af82cc104fa
Author: dust <1036605035@qq.com>
Date:   Sun May 19 15:47:25 2019 +0800

    wrote a readme.txt

$ git log --pretty=oneline

eb62f41107873633bba865bc25080f69f376fa83 append GPL
7807e3424a4f1a253b45329475e6633a63b7b039 add distributed
e4343ddd14c7daddcc7fc60557065af82cc104fa wrote a readme.txt

# 查看分支合并图
$ git log --graph
# 查看分支合并情况
$ git log --graph --pretty=oneline --abbrev-commit 

补充:–pretty=oneline 简化信息,只显示版本号和备注信息

版本回退

$ git reset --hard HEAD ^

HEAD 现在位于 7807e34 add distributed

# 版本回退后 
$ git log --pretty=oneline

7807e3424a4f1a253b45329475e6633a63b7b039 add distributed
e4343ddd14c7daddcc7fc60557065af82cc104fa wrote a readme.txt

# 使用版本号回退到 append GPL
$ git reset --hard eb62f
$ git log --pretty=oneline

eb62f41107873633bba865bc25080f69f376fa83 append GPL
7807e3424a4f1a253b45329475e6633a63b7b039 add distributed
e4343ddd14c7daddcc7fc60557065af82cc104fa wrote a readme.txt

补充:HEAD 表示当前版本,上一个版本是 HEAD^,上上一个版本是 HEAD^^,上100个版本可以用 HEAD~100 表示

查看历史命令

$ git reflog

eb62f41 HEAD@{0}: reset: moving to eb62f
7807e34 HEAD@{1}: reset: moving to HEAD^
eb62f41 HEAD@{2}: commit: append GPL
7807e34 HEAD@{3}: commit: add distributed
e4343dd HEAD@{4}: commit (initial): wrote a readme.txt

撤销修改(未提交到缓存区)

$ git checkout -- readme.txt

补充:git checkout – file 中的 – 很重要,没有 – ,就变成了 ‘切换到另一个分支’ 的命令

撤销修改(已提交到缓存区)

$ git reset HEAD readme.txt

重置后撤出暂存区的变更:
M	readme.txt

$ git status

# 位于分支 master
# 尚未暂存以备提交的变更:
#   (使用 "git add <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#	修改:      readme.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

$ git checkout -- readme.txt
$ git status

# 位于分支 master
无文件要提交,干净的工作区

删除文件

$ git rm file

生成SSH Key

$ ssh-keygen -t rsa -C 'youremail@example.com'

补充:查看用户主目录,如果没有 .ssh 目录,则用上面命令生成,将公钥添加到 GitHub 中

本地仓库和远程仓库关联
ssh 协议

$ git remote add origin git@github.com:dust-github/dustgit.git
$ vgit push -u origin master (第一次提交:后面使用 git push origin master 命令)

Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
Counting objects: 25, done.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (25/25), 2.05 KiB | 0 bytes/s, done.
Total 25 (delta 6), reused 0 (delta 0)
remote: Resolving deltas: 100% (6/6), done.
To git@github.com:dust-github/dustgit.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

https 协议

$ git remote add origin https://github.com/dust-github/dustgit.git

$ git push -u origin master (第一次提交:后面使用 git push origin master 命令)

Counting objects: 25, done.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (25/25), 2.05 KiB | 0 bytes/s, done.
Total 25 (delta 6), reused 0 (delta 0)
remote: Resolving deltas: 100% (6/6), done.
To https://github.com/dust-github/dustgit.git
 * [new branch]      master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。

克隆远程仓库
ssh 协议
$ git clone https://github.com/dust-github/gitskills.git
https 协议
$ git clone git@github.com:dust-github/gitskills.git

创建分支

$ git branch <name>

切换分支

$ git checkout <name>

创建+切换分支

$ git checkout -b dev
# -b 参数表示创建并切换分支,相当于一下两条命令
$ git branch dev
$ git checkout dev

查看当前分支

$ git branch
* dev
  master
# git branch 命令会列出所有分支,当前分支前面标有一个 * 号

查看分支所有提交文件
$ git ls-tree -r master

合并分支

$ git merge dev
更新 198cc11..91aceb0
Fast-forward
 readme.txt | 1 +
 1 file changed, 1 insertion(+)
# git merge 命令用于合并指定分支到当前分支

$ git merge --no-ff -m "merge with no-ff" dev
Merge made by the 'recursive' strategy.
 readme.txt | 1 +
 1 file changed, 1 insertion(+)
# --no-ff 参数,表示禁用 Fast forward,Fast forward 为 Git 默认合并方式

删除分支

$ git branch -d dev
已删除分支 dev(曾为 91aceb0)。

# 查看分支,只剩下 master
$ git branch
* master

# 删除没有合并的分支
$ git branch -D <name>

储藏

# 创建隐藏
$ git stash
# 隐藏列表
$ git stash list
# 恢复隐藏
$ git stash apply
# 指定版本恢复
$ git stash apply stash@{0}
# 恢复并删除隐藏
$ git stash pop

查看远程库的信息

$ git remote
origin

# 更详细的信息
$ git remote -v

origin	git@github.com:dust-github/dustgit.git (fetch)
origin	git@github.com:dust-github/dustgit.git (push)

创建远程分支

$ git checkout -b branch-name origin/branch-name

指定本地分支和远程分支关联

$ git branch --set-upstream-to origin/<branch-name> <branch-name>

$ git branch --set-upstream-to=origin/<branch> <branch-name>

本地抓取分支

$ git pull

本地推送分支

$ git push origin branch-name

本地提交未push的历史整理为直线

$ git rebase

创建标签

$ git tag v1.0

为之前已提交的记录打标签

$ git tag v1.0 3dbe56c

创建带有说明的标签,用-a指定标签名,-m指定说明文字

$ git tag -a v0.1 -m "version 0.1 released" 3dbe56c

查看标签列表

$ git tag

查看标签

$ git show 3dbe56c

删除标签

$ git tag -d v0.1

推送标签

$ git push origin v1.0

推送所有标签

$ git push origin --tags

删除远程标签

$ git push origin :refs/tags/v1.0

检测忽略文件语法

$ git check-ignore

清除未跟踪文件

# 查看将要被删除的文件
$ git clean -n

# 删除当前目录下未跟踪文件,但是不会删除.gitignore文件指定的文件
$ git clean -f

# 删除当前目录下或者其后代目录下未跟踪的文件
$ git clean -df

# 删除当前目录下所有的文件,无论是否在.gitignore文件指定
$ git clean -xf

GIT 配置

$ git config --global color.ui true

$ 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"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值