一个low的开发可能还不是太需要这个东西,一个人的安全部可能也不太需要。一个团队的开发那就得需要了。团队协作开发这个东西必须得懂。所有如果你觉得自己貌似用不到git也可以呀,那只能说明你还没达到那个规模。更准确的说是一个人的开发。git让团队协作变得更加简单。其次就是版本管理,如果不知道什么是版本管理,那只能说明你写的代码根本不重要,丢了也就丢了。并且也不存在迭代的问题。在公司可能一年就让你琢磨这一个功能,一直不停的改改。版本的回滚,比如回滚到历史上的任意一个版本。如果每次更新都手动备份一份。次数多了难免忘记了。需要一个东西,自动的进行备份。以后想回来就自动的回来。这就是git,就这2功能
git window 安装完之后:
启动git bash(相当于在里面集成了一个小型的linux);
liangyi@DESKTOP-253QPV7 MINGW64 /e
$ mkdir git_test ##创建文件夹
liangyi@DESKTOP-253QPV7 MINGW64 /e
$ git init ##git的初始化
Initialized empty Git repository in E:/.git/
$ cd git_test/
liangyi@DESKTOP-253QPV7 MINGW64 /e/git_test (master)
$ cd .git/
liangyi@DESKTOP-253QPV7 MINGW64 /e/git_test/.git (GIT_DIR!)
$ ls ##创建了很多文件
config description HEAD hooks/ info/ objects/ refs/
git 存每次我们改变了什么什么东西,都在这些隐藏目录里。这个目录不要动
我创建了一个小的python脚本
我们需要手动告诉git 我们需要保存文件
vim first_file.py
git add first_file.py ##让git帮管理代码,把代码添加到仓库
git commit -m "commit my first git file" 用git commit 告诉git,把文件提交到仓库
git add 只是把代码放到git 暂存区
git commit 把代码从暂存区存入仓库
团队协作需要知道是谁提交的代码。所以这需要配置用户信息
配置完之后,再执行git commit
$ git commit
Aborting commit due to empty commit message. ###git commit 需要加说明的
然后我们重新git commit 在最下面添加一行备注,然后保存退出
$ git commit
[master (root-commit) fabb31d] git test commit
1 file changed, 2 insertions(+)
create mode 100644 first_file.py
这个时候告诉我们一个文件改变,插入了2行数据,创建了一个文件 644 是文件的权限放到了仓库里
$ git commit
On branch master
nothing to commit, working tree clean
再次commit 告诉我们工作区是干净的
这个时候我们重修修改我们的脚本文件
我新增了345行修改了第2行
重复执行上述操作
$ git add first_file.py
warning: LF will be replaced by CRLF in first_file.py.
The file will have its original line endings in your working directory
liangyi@DESKTOP-253QPV7 MINGW64 /e/git_test (master)
$ git commit
Aborting commit due to empty commit message.
这个时候我们又弹出了文本,比较麻烦的。所以我们加入-m 直接搞定
$ git commit -m "second git test"
[master 0f7886f] second git test
1 file changed, 4 insertions(+), 1 deletion(-)
此时我执行2个操作,对这个脚本进行第三次修改,同时新增一个新文本并添加内容
然后执行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: first_file.py
Untracked files:
(use "git add <file>..." to include in what will be committed)
read.txt
no changes added to commit (use "git add" and/or "git commit -a")
说我们的修改并没有提交,可以使用add 文件名 放到暂存区,checkout file 丢弃(文件里面已经有修改了,可以通过checkout回滚)
untracked 没有跟踪的文件,我们需要add 后才能管理它
$ git checkout first_file.py
liangyi@DESKTOP-253QPV7 MINGW64 /e/git_test (master)
$ cat first_file.py
def sayyi(name):
print("helo world")
print 1
print 2
print 3
我还增加了三行。被回滚了,把我们没有提交的代码给撤回了。
我们还没有add 就可以撤回。为什么呢?
首先看我们在暂存区有没有代码,提交了之后暂存区的代码就被移到了仓库里,暂存区就没了。如果没有就到仓库里找
我们checkout 就相当于吧仓库里的代码又拉下来一份放到我们的本地,所以checkout就撤回了。
add 可以同时对一个目录的代码添加
$ git add .
warning: LF will be replaced by CRLF in read.txt.
The file will have its original line endings in your working directory
liangyi@DESKTOP-253QPV7 MINGW64 /e/git_test (master)
$ git status
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
modified: first_file.py
new file: read.txt
liangyi@DESKTOP-253QPV7 MINGW64 /e/git_test (master)
$ git commit -m "third commit"
[master ac0e533] third commit
2 files changed, 8 insertions(+)
create mode 100644 read.txt
git add . 对当前目录下的所有文件添加
git status 查看当前的代码修改状态
git checkout 把代码从暂存区回滚到工作区
##之前提交到仓库的版本有问题了。需要回滚啊,可是我已经提交了很多次了。我要回滚到指定的那一次。
查看git日志
黄色的才是最重要的,git里面的胃一值就是MD5值,确保每个版本都是唯一的
忽略都作者信息:
$ git log --pretty=oneline
ac0e533bee7cc1277421b81b5b9adbeef9fd2b01 (HEAD -> master) third commit
0f7886f67eaef804c099894fda5f22e0a53f31d0 second git test
fabb31d267ff5b284f9e6c7c612c57d8afc98a2a git test commit
回退到上一个版本:
$ git reset --hard HEAD^
HEAD is now at 0f7886f second git test
reset 重置,–head 把版本号指向上一个。再次查看日志
$ git log --pretty=oneline
0f7886f67eaef804c099894fda5f22e0a53f31d0 (HEAD -> master) second git test
fabb31d267ff5b284f9e6c7c612c57d8afc98a2a git test commit
没了哦
$ ls
first_file.py
文件没了。干干净净的回滚了。然后我继续开发,继续提交代码commit,突然发现回滚错了怎么办。我想再回去
$ git reset --hard ac0e533bee7cc1277421b81b5b9adbeef9fd2b01
HEAD is now at ac0e533 third commit
liangyi@DESKTOP-253QPV7 MINGW64 /e/git_test (master)
$ cat first_file.py
def sayyi(name):
print("helo world")
print 1
print 2
print 3
print 4
print 5
print 6
print 7
复制上面的ID,执行回滚。又回来了
$ git log
commit ac0e533bee7cc1277421b81b5b9adbeef9fd2b01 (HEAD -> master)
Author: yi <971339318@qq.com>
Date: Tue Oct 16 22:57:24 2018 +0800
third commit
commit 0f7886f67eaef804c099894fda5f22e0a53f31d0
Author: yi <971339318@qq.com>
Date: Tue Oct 16 22:41:22 2018 +0800
second git test
commit fabb31d267ff5b284f9e6c7c612c57d8afc98a2a
Author: yi <971339318@qq.com>
Date: Tue Oct 16 22:34:03 2018 +0800
git test commit
那假如我们找不到版本号怎么办呢。看不到了。怎么办怎么办,最后的救命稻草
$ git reflog
ac0e533 (HEAD -> master) HEAD@{0}: reset: moving to ac0e533bee7cc1277421b81b5b9adbeef9fd2b01
7571eaf HEAD@{1}: commit: change 5th
6abc5ae HEAD@{2}: commit: commit after rollback
0f7886f HEAD@{3}: reset: moving to HEAD^
ac0e533 (HEAD -> master) HEAD@{4}: commit: third commit
0f7886f HEAD@{5}: commit: second git test
fabb31d HEAD@{6}: commit (initial): git test commit
git reset --heard HEAD^ 回滚到上一次
git reset – heard sssss 回滚大指定的版本
git reflog 查看所有的操作,找到指定的版本
本地删除文件,git版本库没有删除
$ ls
first_file.py read.txt
liangyi@DESKTOP-253QPV7 MINGW64 /e/git_test (master)
$ rm read.txt
liangyi@DESKTOP-253QPV7 MINGW64 /e/git_test (master)
$ 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)
2种方案:1. git add/rm 把版本库也删掉,并且git commit;
git reset HEAD file 从暂存区回滚回工作区
2.git cheout 版本库还有。可以一键撤销(没有add 和 rm 之前可以执行)