1.准备工作
1.1安装
git安装略过,windows安装git,直接去git官网下载安装就行了。
1.2查看git版本
git version
PS E:\smallbaoo\csdn\git> git version
git version 2.14.1.windows.1
1.3首次使用配置git
git config --global user.name "baoo"
git config --global user.email "xxxxx@qq.com"
2.创建版本库
初始化
创建一个目录,在目录下创建版本库(git仓库)
mkdir demo
cd demo
git init
初始化后会创建一个.git文件夹,默认隐藏的。
readme.txt
新建一个readme.txt文件(一定要在demo文件夹下)
查看git状态
git status
PS E:\smallbaoo\csdn\git> git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
readme.txt
nothing added to commit but untracked files present (use "git add" to track)
将文件添加到仓库
git add readme.txt
git add .
将文件提交到仓库
git commit -m '备注'
PS E:\smallbaoo\csdn\git> git commit -m 'readme'
[master (root-commit) 78ee446] readme
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 readme.txt
查看文件中具体修改了什么内容
git diff readme.txt
PS E:\smallbaoo\csdn\git> git diff readme.txt
diff --git a/readme.txt b/readme.txt
index e69de29..51558d9 100644
--- a/readme.txt
+++ b/readme.txt
@@ -0,0 +1 @@
+第一次
\ No newline at end of file
查看当前所以版本
git log
PS E:\smallbaoo\csdn\git> git log
commit f40721af0fa259b9c6c034a8662fc16aec10e971 (HEAD -> master)
Author: hdj_wq <747723658@qq.com>
Date: Tue Jul 10 17:43:15 2018 +0800
three
commit 8d1d2659577164c16943079ec49a1b074f81f423
Author: hdj_wq <747723658@qq.com>
Date: Tue Jul 10 17:42:45 2018 +0800
two
commit 4ccd79e2fd0a2e102fd7b0920795ab6f75a6423e
Author: hdj_wq <747723658@qq.com>
Date: Tue Jul 10 17:42:15 2018 +0800
one
commit 78ee44616053dc13d3539c4c37c57713331ab0b0
Author: hdj_wq <747723658@qq.com>
Date: Tue Jul 10 17:36:35 2018 +0800
readme
眼花缭乱,加上参数
git log --pretty=oneline
PS E:\smallbaoo\csdn\git> git log --pretty=oneline
f40721af0fa259b9c6c034a8662fc16aec10e971 (HEAD -> master) three
8d1d2659577164c16943079ec49a1b074f81f423 two
4ccd79e2fd0a2e102fd7b0920795ab6f75a6423e one
78ee44616053dc13d3539c4c37c57713331ab0b0 readme
在Git中,用HEAD
表示当前版本,上一个版本就是HEAD^
,上上一个版本就是HEAD^^
git reset --heard HEAD^
PS E:\smallbaoo\csdn\git> git reset --hard HEAD^
HEAD is now at 8d1d265 two
现在我们回到了two这个版本了,但是,现在来看
PS E:\smallbaoo\csdn\git> git log
commit 8d1d2659577164c16943079ec49a1b074f81f423 (HEAD -> master)
Author: hdj_wq <747723658@qq.com>
Date: Tue Jul 10 17:42:45 2018 +0800
two
commit 4ccd79e2fd0a2e102fd7b0920795ab6f75a6423e
Author: hdj_wq <747723658@qq.com>
Date: Tue Jul 10 17:42:15 2018 +0800
one
commit 78ee44616053dc13d3539c4c37c57713331ab0b0
Author: hdj_wq <747723658@qq.com>
Date: Tue Jul 10 17:36:35 2018 +0800
readme
此时我们没有three版本了,就像从20世纪穿梭到19世纪就再也回不到未来一样,但是,现在我们在找到上面代码中的three版本的commit id号,依旧能够回到未来的某个版本。但是不是每一次都能找到的。
后悔药
git reflog
git reflog会记录你的每一次命令
PS E:\smallbaoo\csdn\git> git reflog
f40721a (HEAD -> master) HEAD@{0}: reset: moving to f40721af0fa2
8d1d265 HEAD@{1}: reset: moving to HEAD^
f40721a (HEAD -> master) HEAD@{2}: commit: three
8d1d265 HEAD@{3}: commit: two
4ccd79e HEAD@{4}: commit: one
78ee446 HEAD@{5}: commit (initial): readme
git diff HEAD -- readme.txt
命令可以查看工作区和版本库里面最新版本的区别:
PS E:\smallbaoo\csdn\git> git diff HEAD -- readme.txt
diff --git a/readme.txt b/readme.txt
index db5c124..326eebe 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1,6 +1,3 @@
第一次
第二次
-
-
-第三次
\ No newline at end of file
管理修改
git add .
git commit -m 'init'
撤销修改
git checkout -- readme.txt
此命令将把readme.txt文件在工作区的修改全部撤销,这里有两种情况
一种是readme.txt自修改后还没有放在暂存区,现在,撤销修改就回到版本库一模一样的状态
另一种是readme.txt已经添加到暂存区,又做了修改,现在撤销修改就回到添加到暂存区后的状态
总之,就是让这个文件回到最近一次git commit或git add时的状态
删除文件
如果在工作区删除了文件readme.txt后,有两种做法:
一种是:确认删除
git rm readme.txt
git conmit -m 'remove readme.txt'
另一种:误删了readme.txt
git checkout -- readme.txt
此时,误删的文件又回来了
3.远程仓库
关联仓库
在码云上或github上创建一个git仓库,复制git仓库地址
git remote add origin git@github.com:michaelliao/learngit.git
后面的git地址为自己的git地址
推送
git push -u origin master
克隆
git clone git@github.com:michaelliao/gitskills.git
4.分支管理
4.1创建与合并分支
创建分支
git checkout -b dev
-b:创建并切换分支,相当于一下语句
git branch dev
git checkout dev
查看当前分支
git branch
合并分支
现在在master分支
git checkout master
git merge dev
删除分支
git branch -d dev
-d:删除分支
4.2解决冲突
合并并不是一帆风顺的,git中用<<<<<,======,>>>>>>标记出不同分支的内容
手动修改
查看分支合并的情况
git log --graph --pretty=oneline --abbrev-commit
4.3分支管理策略
git默认使用 Fast forward模式,这种模式下删除分支后,就会失去分支的信息
同上面的,现在讲master和dev分支合并
git merge --no-ff -m "merge with no-ff" dev
本次合并,加上了-m参数,将描述加上去了
4.4Bug分支
在开发中,bug简直是不可避免的,git中,修复bug可以通过创建一个临时的分支,修复后合并分支,然后删除临时分支
储存工作现场(不是提交)
git stash
储存工作现场后,就可以创建分支了,而不会因为创建分支而丢失数据
确定bug出现的分支,并创建新的bug分支
git checkout master
git checkout -b issue-101
git add .
git commit -m 'fix bug 101'
修复完成后,切回master分支
git checkout master
git merge --no-ff -m "merged bug fix 101" issue-101
bug修复完成,现在应该接着做手上的工作了
git checkout dev
git status
恢复工作现场
git stash list
一种:
git stash apply
git stash drop
git stash pop
删除为合并的分支
一般用于测试的分支
git branch -D test
4.5多人协作
查看远程库信息
git remote
git remote -v
-v显示更详细的信息
推送分支
git push origin master
git push origin dev
创建远程的dev分支
git checkout -b dev origin/dev
如果推送失败了,一定是冲突问题,先pull下来
git pull
如果pull也失败了,原因是没有指定本地的dev分支和远程的origin/dev分支的链接
git branch --set-upstream-to=origin/dev dev
现在再pull解决冲突,再push
git rebase
5.标签管理
发布一个版本时,我们通常在版本库中打一个标签(tag),这样就唯一确定了标签时刻的版本。首先切换到需要打标签的分支上
git branch
git checkout master
打一个新标签
git tag v1.0
查看标签
git tag
默认的标签打在最新提交的commit上,如果要打在指定的地方,需要跟commit id
git tag v1.0.1 f52c633
tag标签的出现顺序,不是时顺序,而是字母顺序
查看某个标签的详细信息
git show v1.0.1
同样:-m参数可以指定说明文字,-a参数指定标签名
git tag -a v1.0.2 -m '102'
删除标签
git tag -d v1.0.2
推送标签
推送一个标签
git push origin v1.0
推送所以标签
git push origin --tags
本地标签随便删,但是推送到远程了就不一样了,先删本地tag
git tag -d v1.0.1
git push origin :refs/tags/v1.0.1
参见廖雪峰老师的git教程,自己总结的笔记。