创建版本库
先在文件夹下下面创建一个目录
$ mkdir personanlity $ cd personanlity $ pwd /home/wangguangyi/personanlity第一步通过 git init命令创建一个版本库
wangguangyi@ado:~/personanlity$ git init Initialized empty Git repository in /home/wangguangyi/personanlity/.git/然后我们可以创建一个readme文件然后写入
echo > Git is a version control system. Git is free software. > readme.txt然后我们通过git add 将我们的文件添加到仓库
wangguangyi@ado:~/personanlity$ git add readme.txt接着直接commit就可以了
wangguangyi@ado:~/personanlity$ git commit -m "write a readme txt"在这里如果有小伙伴没有配置自己的仓库账户可能会提示配置信息
Author identity unknown *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: empty ident name (for <wangguangyi@ado.localdomain>) not allowed遇到这个就是你自己取gitee或者github中复制自己的仓库账户就可以了然后直接登录
提交成功就是这样的界面
wangguangyi@ado:~/personanlity$ git commit -m "write a readme txt" [master (root-commit) d136ca6] write a readme txt 1 file changed, 3 insertions(+) create mode 100644 readme.txt时光穿梭机
修改提交到版本库
我么接着修改readme中的内容
Git is a distributed version control system. Git is free software.然后查看状态
wangguangyi@ado:~/personanlity$ git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: readme.txt no changes added to commit (use "git add" and/or "git commit -a")这里显示modified 证明我们修改成功
这里我们可以查看我们修改的内容
wangguangyi@ado:~/personanlity$ git diff readme.txt diff --git a/readme.txt b/readme.txt index 37c18bc..b6cc2a7 100644 --- a/readme.txt +++ b/readme.txt @@ -1,3 +1,4 @@ -Git is a version control system. +Git is a distributed version control system.^M Git is free software. +接着就是前面同样的操作
wangguangyi@ado:~/personanlity$ git add readme.txt wangguangyi@ado:~/personanlity$ git status On branch master Changes to be committed: (use "git restore --staged <file>..." to unstage) modified: readme.txt wangguangyi@ado:~/personanlity$ git commit -m "add distributed" [master efe602e] add distributed 1 file changed, 2 insertions(+), 1 deletion(-) wangguangyi@ado:~/personanlity$ git status On branch master nothing to commit, working tree clean版本回退
现在我们在修改文件
Git is a distributed version control system. Git is free software distributed under the GPL.然后接着继续提交修改
$ git add readme.txt $ git commit -m "append GPL" [master 1094adb] append GPL 1 file changed, 1 insertion(+), 1 deletion(-)ok那么我们一起回顾一下我们到底提交了几个版本
#版本一 Git is a version control system. Git is free software. #版本二 Git is a distributed version control system. Git is free software. #版本三 Git is a distributed version control system. Git is free software distributed under the GPL.一共这有这三个版本
我们可以使用git log 打印出日志看看
wangguangyi@ado:~/personanlity$ git log --pretty=oneline 7fb43c055e2c10a7cc5854eb74529b54be9f04c2 (HEAD -> master) append GPL efe602ee6288991be987c3ad0734b8b78847807a add distributed d136ca60af24c2b175791f72023054ddababaf03 write a readme txt这里使用 log --pretty=oneline简单的看,当然也可以直接使用 git log
wangguangyi@ado:~/personanlity$ git reset --hard HEAD^ HEAD is now at efe602e add distributed--hard参数有啥意义?--hard会回退到上个版本的已提交状态,而--soft会回退到上个版本的未提交状态,--mixed会回退到上个版本已添加但未提交的状态。现在,先放心使用--hard。
看看readme.txt的内容是不是版本add distributed:
wangguangyi@ado:~/personanlity$ cat readme.txt Git is a distributed version control system. Git is free software.可以看到版本确实回退了
然后我们在接着看一下log
wangguangyi@ado:~/personanlity$ git log --pretty=oneline efe602ee6288991be987c3ad0734b8b78847807a (HEAD -> master) add distributed d136ca60af24c2b175791f72023054ddababaf03 write a readme txt确实最新的版本已经不见了,但是我们还是有办法还原的,只要窗口交互的信息还在我们就还可以恢复
wangguangyi@ado:~/personanlity$ git reset --hard 7fb4 HEAD is now at 7fb43c0 append GPL wangguangyi@ado:~/personanlity$ git log --pretty=oneline 7fb43c055e2c10a7cc5854eb74529b54be9f04c2 (HEAD -> master) append GPL efe602ee6288991be987c3ad0734b8b78847807a add distributed d136ca60af24c2b175791f72023054ddababaf03 write a readme txt这里的7fb4就是前面我们对应的那一大串key的开头我们拿到即可
但是我们在操作的时候还是会遇到以外的比如窗口关闭了找不到对应id怎么办??
也就是说在Git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到add distributed版本时,再想恢复到append GPL,就必须找到append GPL的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:
wangguangyi@ado:~/personanlity$ git reflog 7fb43c0 (HEAD -> master) HEAD@{0}: reset: moving to 7fb4 efe602e HEAD@{1}: reset: moving to HEAD^ 7fb43c0 (HEAD -> master) HEAD@{2}: commit: append GPL efe602e HEAD@{3}: commit: add distributed d136ca6 HEAD@{4}: commit (initial): write a readme txtrelog可以查看当前账户的提交历史这样我们就不用怕了