windows:
git将每个版本都独立保存
1.配置,在命令行模式下输入以下命令:
git config --global user.name "用户名"
git config --global user.email "邮箱"
查看是否配置成功:
git config --list
2.git三棵树
工作区域、暂存区域、Git仓库
工作区域:工作目录
暂存区域:存放改动的内容,是一个文件
Git仓库:安全存放所有版本的数据,head指针指向最新版本的内容
3.Git工作流程
- 在工作目录中添加、修改文件
- 将需要进行版本管理的文件放入暂存区域
- 将暂存区域的文件提交到Git仓库
Git管理文件的三种状态:已修改(modified)、已暂存(staged)、已提交(commited)
4.windows下实战
- 建立project文件夹
命令行中在该文件下输入git init命令,多出.git隐藏文件夹,是git用来管理版本迭代的文件夹
- 创建README文档,命令:git add READ.md 将文件添加到暂存区域
- 提交:git commit -m "add a readme file" ,将暂存区域文件提交到Git仓库 ,引号中为添加的说明(-am :add+commit)
5.查看状态 ,git status
正常时返回:
On branch master
nothing to commit, working tree clean
创建文件但未加入到暂存区域:
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
Lisence
nothing added to commit but untracked files present (use "git add" to track)
加入到暂存区:(使用git reset HEAD命令可以撤销)
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: Lisence
如果修改了某个文件的内容,则提示:
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: Lisence
no changes added to commit (use "git add" and/or "git commit -a")
如果使用git checkout -- Lisence,则手动修改的部分被旧的内容覆盖(具有威胁的命令)
如果修改了暂存区的内容,此时会存在两个版本的文件,如果使用git add命令,则将修改后的文件放入暂存区,如果使用git commit命令,则将原文件提交:
D:\project>git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: Lisence
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: Lisence
6.查看历史提交命令 git log
按时间从近到远
D:\project>git log
commit 16bd977fee4c7f35d6da675b5dc47e5c2413bafd (HEAD -> master) (校验和)
Author: dlutjwh <18742027136@163.com>
Date: Tue Jul 2 08:57:52 2019 +0800
change Lisence
commit cbc2fadde3ae1170da493e97b6c2f1587ee0a490
Author: dlutjwh <18742027136@163.com>
Date: Tue Jul 2 08:37:33 2019 +0800
add a lisence file
commit c058db1e856ca72af427c63aeaec24b8291b0e55
Author: dlutjwh <18742027136@163.com>
Date: Mon Jul 1 17:43:34 2019 +0800
add a readme file
7.reset命令
之前的例子可视化
回到上一层:
git reset HEAD~ 波浪线表示回到上一层,两个波浪线表示前两层。。。或者git reset HEAD~2
git reset --mixed(默认) HEAD~:
- 移动HEAD的指向,将其指向上一个快照
- 将HEAD移动后指向的快照回滚到暂存区域
git reset --soft HEAD~:(commit之后后悔了,回来重新提交)
- 移动HEAD的指向,将其指向上一个快照
git reset --hard HEAD~:
- 移动HEAD的指向,将其指向上一个快照
- 将HEAD移动后指向的快照回滚到暂存区域(第二棵树)
- 将暂存区域的文件还原到工作目录(第一棵树)
soft暂存区和工作区都是当前版本的内容,mix暂存区的内容是前一个版本,工作区是现在的,要回到现在状态,必须先add在commit
回到指定快照:
git reset 哈希字符(前几个字符)
回滚个别文件:
git reset 版本快照 文件名/路径 忽略HEAD指针移动这一步
往前滚:
git reset 版本快照ID
git reflog:查看所有历史ID
8.git diff
比较工作空间与暂存空间文件区别
D:\MyProject2>git diff diff --git a/README.md b/README.md index 0f2c569..b9cb571 100644 //文件id以及文件类型和权限 --- a/README.md //---表示旧文件,存放在暂存区域 +++ b/README.md //+++表示新文件,放在工作目录 @@ -1 +1,2 @@ //-表示旧文件,+表示新文件 数字表示开始行号 逗号后的数字表示共多少行 -<EF><BB><BF><E8><AF><BE><E5><90><8E><E4><BD><9C><E4><B8><9A><EF><BC><9A><E6><96><87><E5><AD><97><E6><B8><B8><E6><88> <8F> //减号表示减少的内容 \ No newline at end of file //以上为共同内容 +<EF><BB><BF><E9>B6><E5><9F><BA><E7><A1><80><E5><85><A5><E9><97><A8> +<E8><AF><BE><E5><90><8E><E4><BD><9C><E4><B8><9A><EF><BC><9A><E6><96><87><E5><AD><97><E6><B8><B8><E6><88><8F> \ No newline at end of file //以上为旧文件独有内容 diff --git a/game.py b/game.py index f1f47c4..6f67a73 100644 --- a/game.py +++ b/game.py @@ -4,5 +4,5 @@ using namespace std; int main(){ - + fasdjlfaklgj } \ No newline at end of file //共同内容
//旧文件无独有内容
如果内容太多z向下移动,k向上移动,f一页一页移,b页下移(同vim)
搜索: /+关键词 从上向下搜
9.比较多个id
git diff 快照ID1,快照ID2
10.比较当前工作目录与Git仓库中的快照
git diff 快照id
git diff HEAD (当前最新快照)
11.比较暂存区域和Git仓库快照
git diff --cached
12.指定快照与暂存区域
git diff --cached 快照ID
13.修改最后一次提交
git commit --amend 进入提交说明界面进行编辑
中文字符:git commit --amend -m "中文"
14.手动删除后恢复
git checkout -- README
15.删除文件
git rm data.txt 未完全删除
git reset --soft HEAD~ 回到过去
git rm 命令只删除工作目录和暂存区域的文件,即取消跟踪,在下次提交时不纳入版本管理
git rm -f *** 暴力删除,既删除暂存区,也删除工作目录
git rm --cached 文件名 只删除暂存区的文件
16.重命名文件
git 原文件名 新文件名
17.Git分支 git branch 分支名
git branch -b 分支名 :创建并切换
D:\MyProject2>git branch feature
D:\MyProject2>git log --decorate //decorate显示所有分支和标签
commit 083497934e5c3822d3cb3ee974447e379c275d11 (HEAD -> master, feature)
Author: dlutjwh <18742027136@163.com>
Date: Tue Jul 2 23:32:55 2019 +0800
second 2
commit 42f2acd5401734f4b68fc7b9a46c40c3e3766a58
Author: dlutjwh <18742027136@163.com>
Date: Tue Jul 2 22:50:02 2019 +0800
word game - guess number
master为默认分支
切换分支:git chekout 分支名
D:\MyProject2>git log --decorate --oneline //只显示一行
0834979 (HEAD -> feature, master) second 2
42f2acd word game - guess number
git log --decorate oneline --graph --all 查看所有分支log
18.分支的合并
git merge feature
可能会产生冲突,主要是相同的文件名
19.删除分支
git branch -d 分支名
20.匿名分支