安装
- windows git-for-windows
- ubuntu
sudo apt-get install git
配置信息
必须配置
// 配置用户名
git config --global user.name "zxysilent"
//配置用户邮箱
git config --global user.email "[email protected]"
--global
表示你这台机器上所有的Git仓库都会使用这个配置
其他配置
$ git config --list
比如
git config --global core.ignorecase false
设置大小写敏感git config --global core.autocrlf false
禁用字段换行git config --global credential.helper store
保存信息git config --system --unset credential.helper
清除记录(密码修改后,当前仓库保存信息清除)
以下未测试git config --global credential.helper cache
默认记住15分钟git config --credential.helper 'cache –timeout=3600'
记住1小时
关系图
Workspace:工作区
Index/Stage:暂存区
Repository:本地仓库
Remote:远程仓库
基本Git使用
版本跟踪
- 选择一个文件夹
- 使用
git init
命令把这个目录变成Git可以管理的仓库
git init
Initialized empty Git repository in D:/App/Github/zxyslt/.git/
当前目录下会自动创建一个隐藏的.git的目录,这个目录是Git来跟踪管理版本库的,不要自己修改这个目录里面的文件,因为修改了文件可能产生不可预知的问题! 比如把Git仓库给破坏了。
-
用
vscode
ornotepad++
不是Windows自带的notepad 添加测试文件a.txt
写上一点数据aaaaaa- 用
git add a.txt
把文件a.txt添加到暂存区(Index/Stage)
$ git add a.txt
命令行中执行命令后没有提示信息一般代表成功
- 用
git commit -m "备注信息"
把暂存区的内容添加到本地仓库(Repository)
$ git commit -m "write aaaaaa" [master (root-commit) caac3d8] write aaaaaa 1 file changed, 1 insertion(+) create mode 100644 a.txt
注释为中文可能发生意外(Please refer to Baidu!)
- 用
git status
查看工作区的状态(Workspace)
$ git status On branch master nothing to commit, working tree clean
- 修改文件
a.txt
添加一行bbbbbb 保存
用git status
查看工作区的状态$ 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: a.txt no changes added to commit (use "git add" and/or "git commit -a")
用 `git diff` or `git diff a.txt `查看文件变化
$ git diff a.txt
diff --git a/a.txt b/a.txt
index 90b4516…85553e8 100644
— a/a.txt
+++ b/a.txt
@@ -1 +1,2 @@
aaaaaa
+bbbbbb- 用`git add a.txt`把文件a.txt添加到暂存区然后用`git status`查看工作区的状态
$ git status
On branch master
Changes to be committed:
(use “git reset HEAD…” to unstage)
modified: a.txt- 用`git commit -m "备注信息"`把暂存区的内容添加到本地仓库
$ git commit -m “append bbbbbb”
[master 1baf46d] append bbbbbb
1 file changed, 1 insertion(+)- 用`git log`查看提交记录
$ git log
commit 1baf46dea014d993843137d3bf0aa56fe448699a (HEAD -> master)
Author: zxysilent [email protected]
Date: Fri Nov 10 21:18:13 2017 +0800
append bbbbbb
commit caac3d8a845500c95f70499b40710826fcd644af
Author: zxysilent [email protected]
Date: Fri Nov 10 21:00:34 2017 +0800
write aaaaaa - 用
- 用
git log --pretty=oneline
查看简要提交记录$ git log --pretty=oneline 1baf46dea014d993843137d3bf0aa56fe448699a (HEAD -> master) append bbbbbb caac3d8a845500c95f70499b40710826fcd644af write aaaaaa
每一次提交就是一个版本 commit_id
小结
git init
初始化一个仓库git add file
添加文件到暂存区git commit -m "注释信息"
把暂存区文件添加到仓库(一次提交为一个版本)git status
查看工作区状态信息git diff
orgit diff <file>
查看文件变化信息git log
查看提交记录git log --pretty=oneline
查看简要提交记录
后悔药
- 修改文件a.txt添加一行cccccc保存
- 用
git add a.txt
添加到暂存区 - 用
git commit -m "append cccccc"
提交到版本库
- 用
- 用
git log
查看版本记录$ git log commit cccb318a93f00cd0dd092c8385354e0d34f3d226 (HEAD -> master) Author: zxysilent <[email protected]> Date: Fri Nov 10 21:50:35 2017 +0800 append cccccc commit 1baf46dea014d993843137d3bf0aa56fe448699a Author: zxysilent <[email protected]> Date: Fri Nov 10 21:18:13 2017 +0800 append bbbbbb commit caac3d8a845500c95f70499b40710826fcd644af Author: zxysilent <[email protected]> Date: Fri Nov 10 21:00:34 2017 +0800 write aaaaaa
- 用
git reset --hard HEAD^
把当前的版本回退到上一个版本(with two dashes)$ git reset --hard HEAD^ HEAD is now at 1baf46d append bbbbbb
要回退到上上个版本只需把
HEAD^
改成HEAD^^
以此类推。
如果要回退到前100个版本的话,可以使用git reset –hard HEAD~100
即可
更多信息Please refer to Baidu!
-
用
git reset --hard commit_id
把当前的版本切换到指定版本$ git reset --hard caac3d8 HEAD is now at caac3d8 write aaaaaa
一般输入前7个就可以了
-
用
git log
查看版本记录$ git log commit caac3d8a845500c95f70499b40710826fcd644af Author: zxysilent <[email protected]> Date: Fri Nov 10 21:00:34 2017 +0800 write aaaaaa
其他提交信息不见了,不见了
5. 用git reflog
查看每次操作版本的记录
$ git reflog
caac3d8 (HEAD -> master) HEAD@{0}: reset: moving to caac3d8
1baf46d HEAD@{1}: reset: moving to HEAD^
cccb318 HEAD@{2}: commit: append cccccc
1baf46d HEAD@{3}: commit: append bbbbbb
caac3d8 (HEAD -> master) HEAD@{4}: commit (initial): write aaaaaa
看到了熟悉的版本号又可以用
git reset --hard commit_id
切换到指定版本
小结
git log
查看提交记录git reset --hard HEAD^
把当前的版本回退到上一个版本git reflog
查看每次操作版本的记录git reset --hard commit_id
把当前的版本切换到指定版本
撤销修改
情形A(工作区)
- 修改文件a.txt添加一行dddeee保存并用
git status
查看工作区信息$ 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: a.txt no changes added to commit (use "git add" and/or "git commit -a")
突然意识到 天啦不是应该dddddd
此处有重点** (use “git checkout –
2. 用git checkout -- a.txt
丢弃工作区
$ git checkout -- a.txt
查看文件发现dddeee消失了
注意这里有两种情况:
一种是
a.txt
自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是a.txt
已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,git checkout -- <file>
就是让这个文件回到最近一次git commit
或git add
时的状态。
情形B(暂存区)
- 修改文件a.txt添加一行fffggg保存然后用
git add a.txt
添加到暂存区再用git status
查看工作区信息$ git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: a.txt
此处又有重点** (use “git reset HEAD
Index/Stage:暂存区
要多看提示信息
- 用
git reset HEAD a.txt
暂存区的修改撤销掉$ git reset head a.txt Unstaged changes after reset: M a.txt
- 用
git status
查看工作区信息$ 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: a.txt no changes added to commit (use "git add" and/or "git commit -a")
现在暂存区是干净的,工作区有修改
git checkout -- <file>
丢弃工作区
情形C
版本库?
git reset --hard commit_id
为所欲为
小结
- 工作区修改未提交
git checkout -- <file>
工作区撤销到版本库一样 - 工作区修改已经提交
git checkout -- <file>
工作区撤销到暂存区一样 - 工作区修改已经提交 ``git reset HEAD a.txt` 暂存区的修改撤销掉
git reset --hard commit_id
把当前的版本切换到指定版本
删除文件
- 添加t.txt文件写上一点数据tttttt添加到暂存区(
git add t.txt
)并且提交到版本库(git commit -m "备注信息"
)git add t.txt $ git commit -m "add t.txt" [master 2d0d9fa] add t.txt 1 file changed, 1 insertion(+) create mode 100644 t.txt
- 删除t.txt并用
git status
查看工作区信息$ git status On branch master Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) deleted: t.txt no changes added to commit (use "git add" and/or "git commit -a")
此处有重点
(use “git add/rm
…” to update what will be committed)
(use “git checkout –…” to discard changes in working directory)
- 用
git checkout -- <file>
撤销删除$ git checkout -- t.txt
- 用
git add/rm <file>
并用git commit -m "备注信息"
从版本库中删除$ git rm t.txt rm 't.txt' $ git commit -m "delete t.txt" [master 3b3b9f2] delete t.txt 1 file changed, 1 deletion(-) delete mode 100644 t.txt
小结
git rm <file>
andgit commit -m "备注信息"
从版本库删除- 误删除
git checkout -- <file>
撤销删除
Comments