[toc]
chapter(二)
2.1 插:如何更改当前Git用户名和邮箱?
使用git config --global --list
可以查看当前账户和邮箱
再使用:
git config --global user.name "username"
git config --global user.email "@email"
2.2 继续Git,使用git status 查看状态
toto@pc:~/code/testGit$ git status
On branch master
nothing to commit, working tree clean
可以发现似乎没什么值得看的信息。
然后vim helloword.cpp
,增加一句话std::cout << "test git status" << std::endl;
#include<iostream>
int main()
{
std::cout << "This is a program that test Git!" << std::endl;
std::cout << "test git status" << std::endl;
return 0;
}
:wq
-保存退出
再输入: git status
toto@pc:~/code/testGit$ 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: helloword.cpp
no changes added to commit (use "git add" and/or "git commit -a")
toto@pc:~/code/testGit$
可以看到:git的提示和之前的提示完全不同了。 上面的命令的意思是:helloword.cpp被修改过了,但还没有准备提交的修改
2.3 如何看到底修改了什么?
上面的git status
只能看到是哪个文件被改了。
但是,这个文档什么被改了呢?
嗯!有的,可以使用git diff
命令
toto@pc:~/code/testGit$ git diff
diff --git a/helloword.cpp b/helloword.cpp
index 4894911..d342859 100644
--- a/helloword.cpp
+++ b/helloword.cpp
@@ -3,5 +3,6 @@
int main()
{
std::cout << "This is a program that test Git!" << std::endl;
+ std::cout << "test git status" << std::endl;
return 0;
}
toto@pc:~/code/testGit$
注意看结果:明显可以看到增加的那一行是什么。
我们在git add helloword.cpp
没反应,好结果!
我们在git commit -m "add new line that test git status
toto@pc:~/code/testGit$ git commit -m "add new line that test git status"
[master 2fe4439] add new line that test git status
1 file changed, 1 insertion(+
在git status
以下:
toto@pc:~/code/testGit$ git status
On branch master
nothing to commit, working tree clean
发现结果:显示没有什么修改,工作目录是干净的!
2.4 版本管理之版本回退
现在我们已经有3个版本了,我有加了一个版本,这个版本是重复上面的步骤。 如果不断的进行修改,版本就会逐渐增加。
- 假设某天,你突然代码写错了!要回退到之前的版本,这时该怎么办?
先看看之前的版本:
#include<iostream> int main() { std::cout << "This is a program that test Git!" << std::endl;// 版本1只有此行 std::cout << "test git status" << std::endl; // 版本2有此行和上一行 std::cout << "test git status2" << std::endl; // 版本3有此行和上2行 return 0; }
- 只有3个版本,我们还能记住那个版本是什么?可是如果版本多!内容几千行怎么办?
git 提供的命令
git log
,结果如下:
toto@pc:~/code/testGit$ git log
commit cd5b52f2f8f5339973092461584002f3ff984ff4 (HEAD -> master)
Author: StudyWithoutStress
Date: Sun May 2 21:29:44 2021 +0800
test git status2
commit 2fe44398b637c766a31b590ab73345cba89b5681
Author: StudyWithoutStress
Date: Sun May 2 17:06:15 2021 +0800
add new line that test git status
commit 01630fbc39a8f8719b8409ce39ad5d19e60f4497
Author: StudyWithoutStress
Date: Sun May 2 16:07:58 2021 +0800
test Git program
toto@pc:~/code/testGit$
可以清晰的看到,三个版本,当时git commit
的注释,更改时间,作者信息,还有一个很长的码,这是commit id-版本号
;这是一个16进制的数字。
注意git log
的显示顺序是从最近到最远
这里只有三个版本,如果版本很多,git log
一下子就乱了!可以采用参数--pretty=oneline
toto@pc:~/code/testGit$ git log --pretty=oneline
cd5b52f2f8f5339973092461584002f3ff984ff4 (HEAD -> master) test git status2
2fe44398b637c766a31b590ab73345cba89b5681 add new line that test git status
01630fbc39a8f8719b8409ce39ad5d19e60f4497 test Git program
- 现在我们要回退版本了!
命令git reset --hard HEAD^
,HEAD^
是退回上一个版本,HEAD^^
是退回上上一个版本。
以此类推,但是如果是上99个版本呢?
采用命令:HEAD~99
结果:
toto@pc:~/code/testGit$ git reset --hard HEAD^
HEAD is now at 2fe4439 add new line that test git status
可以看到:已经退回到上一个版本了。
我们看看helloword.cpp
是不是回退了!
果然回退了哦!
- 现在我有发现,我还是想要第3个版本的代码!
同样的命令,不过一定要知道第3个版本的
commit id
,这个可以通过shell
窗口自行寻找!
toto@pc:~/code/testGit$ git reset --hard cd5b52f
HEAD is now at cd5b52f test git status2
toto@pc:~/code/testGit$
可以看到,果然回来了!
- 现在又有问题了,我把
commit id
忘了!怎么办? git给你想好解决方法了! 命令git reflog
可以查到!
toto@pc:~/code/testGit$ git reflog
cd5b52f (HEAD -> master) HEAD@{0}: reset: moving to cd5b52f
2fe4439 HEAD@{1}: reset: moving to HEAD^
cd5b52f (HEAD -> master) HEAD@{2}: commit: test git status2
2fe4439 HEAD@{3}: commit: add new line that test git status
01630fb HEAD@{4}: commit (initial): test Git program
可以发现,commit id
的信息很清楚。
2.5 总结
git config --global --list
可以查看当前账户和邮箱git status
查看git 当前的状态git diff
查看文件具体改了什么git reset --hard
版本变动 指定HEAD^
或commit id
: