[TOC]什么时候才能支持目录啊。。。。。。。。。。。
Git学习整理
更新2019-8-22
学习自
极客时间-玩转Git三剑客
Git官网
猴子都能懂得git入门在线git练习
常用 Git 命令清单
一个好用的Git命令大全
安装Git
官网安装教程
Windows打开Git Bash
输入git --version
查看当前安装git版本信息,如果是Mac直接打开命令行输入git --version
。
Git最小配置
git config --global user.name "dongdong.wu"
git config --global user.email "[email protected]"
git config --global color.ui auto
config的三个作用域
git config --local //只针对某个仓库
git config --global //针对当前用户所有仓库
git config --system //针对当前系统所有登录的用户
显示config的配置信息
git config --list
git config --list --local
git config --list --global
git config --list --system
也可以查看当前用户下的.gitconfig
即
cd
cat .gitconfig
创建Git仓库
//1.创建一个新项目
mkdir GitTest
//2.初始化该项目
cd GitTest
git init //执行完成后,提示Initialized empty Git repository in C:/Users/Thor/Desktop/GitTest/.git/
//3.查看是否初始化项目成功,用下面命令可以看到一个.git文件表示初始化成功
ls -al
提交认知
一般我们自己本地git在提交分为3个区域:
- 我们自己的工作目录
-
git add files
之后文件进入的暂存区 -
git commit
之后文件进入的版本历史
如果有远程仓库,给Git正在的区域分布为下面四个区域:
- Workspace:工作区
- Index / Stage:暂存区
- Repository:仓库区(或本地仓库)
- Remote:远程仓库
下面图片来源为:常用 Git 命令清单
在GitTest添加四个文件
-
touch one.txt two.txt three.txt
创建三个文件,然后用ls
查看当前目录下是否有这四个文件。 -
mkdir four
创建一个文件夹,进入文件夹cd four
,创建一个文件touch four_dir_one.txt
这样之后我们的四个文件都创建好了。
查看当前工作目录与暂存区的关系
git status
,输入当前命令可以看到下面提示。
On branch master
No commits yet
Untracked files:
(use "git add ..." to include in what will be committed)
fourDir/
one.txt
three.txt
two.txt
nothing added to commit but untracked files present (use "git add" to track)
告诉我们下面这四个文件git从来没有管理过,那怎么可以管理呢?可以看到上面提示中已经给出我们答案了git add 文件
就可以添加管理了。
git add
命令简单介绍
git add [file]
:将文件添加进暂存区git add [file1] [file2] ...
:将多个文件添加进暂存区git add -u
:将文件的修改、文件的删除,添加到暂存区。git add .
:将文件的修改,文件的新建,添加到暂存区。git add -A
:将文件的修改,文件的删除,文件的新建,添加到暂存区。git add -u
以及他们之间的区别
git add -A
相对于git add -u
命令的优点 : 可以提交所有被删除、被替换、被修改和新增的文件到数据暂存区,而git add -u
只能操作跟踪过的文件
git add -A
等同于git add -all
git add *Controller
:将以Controller结尾的文件的所有修改添加到暂存区git add Hello*
:将所有以Hello开头的文件的修改添加到暂存区 例如:HelloWorld.txt,Hello.java,HelloGit.txt ...git add Hello?
:将以Hello开头后面只有一位的文件的修改提交到暂存区 例如:Hello1.txt,HelloA.java 如果是HelloGit.txt或者Hello.java是不会被添加的
简单的例子
git add 可以直接后面加多个文件或文件夹
-
添加一个文件方式
thor@tiantian:~/Documents/GitTest$ git add one.txt thor@tiantian:~/Documents/GitTest$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached
..." to unstage) new file: one.txt Untracked files: (use "git add ..." to include in what will be committed) fourDir/ three.txt two.txt -
添加多个文件
thor@tiantian:~/Documents/GitTest$ git add two.txt fourDir/ thor@tiantian:~/Documents/GitTest$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached
..." to unstage) new file: fourDir/four_dir_one.txt new file: one.txt new file: two.txt Untracked files: (use "git add ..." to include in what will be committed) three.txt -
添加所有新建的
thor@tiantian:~/Documents/GitTest$ git add . thor@tiantian:~/Documents/GitTest$ git status On branch master No commits yet Changes to be committed: (use "git rm --cached
..." to unstage) new file: fourDir/four_dir_one.txt new file: one.txt new file: three.txt new file: two.txt
进行一次commit操作
git commit
命令
thor@tiantian:~/Documents/GitTest$ git commit -m "add four files"
[master (root-commit) b989dc2] add four files
4 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 fourDir/four_dir_one.txt
create mode 100644 one.txt
create mode 100644 three.txt
create mode 100644 two.txt
git diff
命令简单介绍
-
git diff
比较的是工作区和暂存区的差别 -
git diff --cached
比较的是暂存区和版本库的差别 -
git diff HEAD
可以查看工作区和版本库的差别
git commit
命令简单介绍
-
git commit -m [message]
:提交暂存区到仓库区 -
git commit [file1] [file2] ... -m [message]
:提交暂存区的指定文件到仓库区 -
git commit -a
:提交工作区自上次commit之后的变化,直接到仓库区 -
git commit -v
:提交时显示所有diff信息 -
git commit --amend -m [message]
:使用一次新的commit,替代上一次提交。如果代码没有任何新变化,则用来改写上一次commit的提交信息 -
git commit --amend [file1] [file2] ...
: 重做上一次commit,并包括指定文件的新变化
查看一下提交记录
git log
命令查看一下当前提交记录
thor@tiantian:~/Documents/GitTest$ git log
commit b989dc26fa089d76de381ace2e360d69ab60e9ea (HEAD -> master)
Author: dongdong.wu
Date: Sun Mar 17 14:49:31 2019 +0800
add four files
git log
命令简单介绍
具体可以查看Git官网查看,下面我就简单列举我用过的。官网地址
-
git log
:会按提交时间列出所有的更新,最近的更新排在最上面-
添加参数
-n
:显示最近提交n次记录。如git log -1
显示最近提交的一次记录thor@tiantian:~/Documents/GitTest$ git log -1 commit 218dc3bf854ae9f21c335d45c7370a9d3bb5ebb3 (HEAD -> master) Author: dongdong.wu
Date: Sun Mar 17 19:47:08 2019 +0800 mv one.txt to one.md 添加参数
--since, --after
:仅显示指定时间之后的提交。时间格式:比如说具体的某一天(“2008-01-15”),或者是多久以前(“2 years 1 day 3 minutes ago”)。如git log --after="2019.3.17"
显示2019年3月17日之后提交的添加参数
--until, --before
:仅显示指定时间之前的提交。添加参数
--author
:仅显示指定作者相关的提交。如:git log --author="dongdong.wu"
添加参数
--committer
:仅显示指定提交者相关的提交。如:git log --committer="dongdong.wu"
提交者和作者的区别
添加参数
-p
:展开显示每次提交的内容差异。如git log -p -1
显示最近一次提交的变化差异。该选项除了显示基本信息之外,还在附带了每次 commit 的变化。当进行代码审查,或者快速浏览某个搭档提交的 commit 的变化的时候,这个参数就非常有用了。添加参数
--stat
:仅显示简要的增改行数统计-
添加参数
--pretty
:可以指定使用完全不同于默认格式的方式展示提交历史- 一般用的参数
--pretty:format"一些参数具体看官网参数说明"
。例如:$ git log --pretty=format:"%h - %an, %ar : %s"
- 一般用的参数
-
添加参数
--oneline
:--pretty=oneline --abbrev-commit
的简化用法。同时可以获得最短的CommitIdthor@tiantian:~/Documents/GitTest$ git log --oneline 218dc3b (HEAD -> master) mv one.txt to one.md b989dc2 add four files
添加参数
--graph
:显示 ASCII 图形表示的分支合并历史。
-
至此一次简单的git提交就完成了。
git修改文件名称
第一种笨方法
# 第一步查看当前文件夹下有哪些文件
thor@tiantian:~/Documents/GitTest$ ls
fourDir one.txt three.txt two.txt
# 第二步,我要把one.txt 重名了为 one.md
thor@tiantian:~/Documents/GitTest$ mv one.txt one.md
# 第三步 看本地文件是否重命名成功
thor@tiantian:~/Documents/GitTest$ ls
fourDir one.md three.txt two.txt
# 第四步 把新改的文件添加到暂存区
thor@tiantian:~/Documents/GitTest$ git add one.md
# 第五步 删除原来暂存区中的文件,即one.txt
thor@tiantian:~/Documents/GitTest$ git rm one.[按两下TAB键会有下面提示]
one.md one.txt
thor@tiantian:~/Documents/GitTest$ git rm one.txt
rm 'one.txt'
# 第六步 查看当前暂存区,可以可看到提示就是 renamed: one.txt -> one.md
thor@tiantian:~/Documents/GitTest$ git status
On branch master
Changes to be committed:
(use "git reset HEAD ..." to unstage)
renamed: one.txt -> one.md
第二种方法(推荐)
因为使用了第一种方法文件名已经被改变了,所以我们要先恢复到原来版本状态。首先先用
git reset --hard
命令重置暂存区与工作区,与上一次commit保持一致。然后通过
git status
可以看到改变的都被取消了。在通过ls
命令可以看到文件名被恢复原来样子了。-
现在我们就通过一个简单命令实现第一种方法。
git mv one.txt one.md
就可以实现第一种方法效果thor@tiantian:~/Documents/GitTest$ git mv one.txt one.md thor@tiantian:~/Documents/GitTest$ git status On branch master Changes to be committed: (use "git reset HEAD
..." to unstage) renamed: one.txt -> one.md thor@tiantian:~/Documents/GitTest$ ls fourDir one.md three.txt two.txt -
提交变更
thor@tiantian:~/Documents/GitTest$ git commit -m "mv one.txt to one.md" [master 218dc3b] mv one.txt to one.md 1 file changed, 0 insertions(+), 0 deletions(-) rename one.txt => one.md (100%) thor@tiantian:~/Documents/GitTest$ git log commit 218dc3bf854ae9f21c335d45c7370a9d3bb5ebb3 (HEAD -> master) Author: dongdong.wu
Date: Sun Mar 17 19:47:08 2019 +0800 mv one.txt to one.md commit b989dc26fa089d76de381ace2e360d69ab60e9ea Author: dongdong.wu Date: Sun Mar 17 14:49:31 2019 +0800 add four files
git rm
命令简单介绍
-
git rm [file1] [file2] ...
: 删除工作区文件,并且将这次删除放入暂存区 -
git rm --cached [file]
:停止追踪指定文件,但该文件会保留在工作区
git reset
命令简单介绍
-
git reset --hard
:重置暂存区与工作区,与上一次commit保持一致 -
git reset --hard HEAD^
:用HEAD
表示当前版本,上一个版本就是HEAD^
,当然往上100个版本写100个^
比较容易数不过来,所以写成HEAD~100
。 -
git reset --hard [commit-id]
:commitId可以通过git log --graph --oneline
获取的commitId就是最短的id
git branch
命令简单介绍
一般用于分支的操作,比如创建分支,查看分支等等。
因为现有项目还未有分支用我当前项目下来展示一下。
-
git branch
:列出本地已经存在的分支,并且在当前分支的前面用"*"标记dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev) $ git branch * dev develop master
-
git branch -r
:查看远程版本库分支列表dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev) $ git branch -r origin/HEAD -> origin/master origin/develop origin/master origin/release-1.0.2 origin/release-1.0.4
-
git branch -a
:查看所有分支列表,包括本地和远程dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev) $ git branch -a * dev develop master remotes/origin/HEAD -> origin/master remotes/origin/develop remotes/origin/master remotes/origin/release-1.0.2 remotes/origin/release-1.0.4
-
git branch [branch-name]
:新建一个分支,但依然停留在当前分支thor@tiantian:~/Documents/GitTest$ git branch * master thor@tiantian:~/Documents/GitTest$ git branch test thor@tiantian:~/Documents/GitTest$ git branch -v * master 218dc3b mv one.txt to one.md test 218dc3b mv one.txt to one.md
-
git branch [branch-name] [commit-id]
:新建一个分支,指向指定committhor@tiantian:~/Documents/GitTest$ git branch * master test thor@tiantian:~/Documents/GitTest$ git log --oneline 218dc3b (HEAD -> master, test) mv one.txt to one.md b989dc2 add four files thor@tiantian:~/Documents/GitTest$ git branch commitBranch b989dc2 thor@tiantian:~/Documents/GitTest$ git branch -v commitBranch b989dc2 add four files * master 218dc3b mv one.txt to one.md test 218dc3b mv one.txt to one.md
-
git branch -d [branch-name]
:删除分支,如果在分支中有一些未merge的提交,那么会删除分支失败,此时可以使用git branch -D dev:强制删除dev分支
。thor@tiantian:~/Documents/GitTest$ git branch -v * master 218dc3b mv one.txt to one.md test 218dc3b mv one.txt to one.md thor@tiantian:~/Documents/GitTest$ git branch -d test Deleted branch test (was 218dc3b). thor@tiantian:~/Documents/GitTest$ git branch -v * master 218dc3b mv one.txt to one.md
-
删除远程分支
git push origin --delete [branch-name]
git branch -dr [remote/branch]
-
git branch -v
:可以查看本地分支dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev) $ git branch -v * dev ea08ab9 上传凭证添加拨打电话功能 develop ea08ab9 上传凭证添加拨打电话功能 master bd017d3 正式版本号变更1.0.4.5
-
git branch -vv
:可以查看本地分支对应的远程分支dongdong.wu@pl017 MINGW32 ~/Desktop/qiyaApp (dev) $ git branch -vv * dev ea08ab9 上传凭证添加拨打电话功能 develop ea08ab9 [origin/develop] 上传凭证添加拨打电话功能 master bd017d3 [origin/master] 正式版本号变更1.0.4.5
-
git branch -m oldName newName
:给分支重命名。thor@tiantian:~/Documents/GitTest$ git branch * master thor@tiantian:~/Documents/GitTest$ git branch test1 thor@tiantian:~/Documents/GitTest$ git branch -v * master 218dc3b mv one.txt to one.md test1 218dc3b mv one.txt to one.md thor@tiantian:~/Documents/GitTest$ git branch -m test1 test thor@tiantian:~/Documents/GitTest$ git branch -v * master 218dc3b mv one.txt to one.md test 218dc3b mv one.txt to one.md
2. Git checkout
1. 操作文件 2. 操作分支
2.1 操作文件
2.1.1 git checkout filename 放弃单个文件的修改
2.1.2 git checkout . 放弃当前目录下的修改
2.2 操作分支
2.2.1 git checkout master 将分支切换到master
2.2.2 git checkout -b master 如果分支存在则只切换分支,若不存在则创建并切换到master分支,repo start是对git checkout -b这个命令的封装,将所有仓库的分支都切换到master,master是分支名,
2.3 查看帮助
git checkout --help
当然git checkout还有许多命令,但这些已经能满足我们日常开发所需