GIT (分布式版本控制系统)---创建git版本仓库,暂存已修改,忽略文件,版本回退

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 [1]  Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

常用操作指令
git add [file1] [file2] ... # 添加指定文件到暂存区
git add [dir] # 添加指定目录到暂存区,包括子目录
git add . # 添加当前目录的所有文件到暂存区
git add -p # 添加每个变化,都要求确认
git rm [file1] [file2] ... # 删除工作区文件,并且将这次删除放入暂存区
git rm --cached [file] # 停止追踪指定文件,但该文件会保留在工作区
git mv [file-original] [file-renamed] # 改变文件,并且将这个改名放入暂存区

一:创建git版本仓库

创建git版本仓库

什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。

所以,创建一个版本库非常简单,首先,选择一个合适的地方,创建一个空目录:


第二步,通过git init命令把这个目录变成Git可以管理的仓库:

$ git init
Initialized empty Git repository in /Users/michael/learngit/.git/

瞬间Git就把仓库建好了,而且告诉你是一个空的仓库(empty Git repository),细心的读者可以发现当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,没事千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
1:建立目录
[root@server1 ~]# mkdir demo
[root@server1 ~]# ls
ansible  demo  index.html  test.sql

2:安装git
[root@server1 demo]# yum install git -y
 
3:初始化
[root@server1 demo]# git init
Initialized empty Git repository in /root/demo/.git/

4:此时在用户组目录里面可以查看到
[root@server1 demo]# l.
.  ..  .git

5:查看状态
[root@server1 demo]# git status
# On branch master
#
# Initial commit
#
nothing to commit (create/copy files and use "git add" to track)

6:建立文件并导入数据
[root@server1 demo]# touch file1
[root@server1 demo]# echo westos > file1
[root@server1 demo]# ls
file1

7:查看状态:
[root@server1 demo]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#	file1
nothing added to commit but untracked files present (use "git add" to track)

8:加-s,显示文件的状态
[root@server1 demo]# git status -s
?? file1           ??表示文件还没有提交

9:添加file1到暂存区
[root@server1 demo]# git add file1


10:查看状态
[root@server1 demo]# git status -s
A  file1           A表示文件此时被添加到暂存区


11:提交到版本库,第一次提交需要进行一些操作
[root@server1 demo]# git commit -m "add file1"

*** Please tell me who you are.

Run

  git config --global user.email "[email protected]"
  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: unable to auto-detect email address (got 'root@server4.(none)')



[root@server1 demo]# git config --global user.email "[email protected]"
[root@server1 demo]# git config --global user.name yz

12:再次提交到版本库
[root@server1 demo]# git status -s
A  file1
[root@server1 demo]# git commit -m "add file1"   ##提交到版本库
[master (root-commit) 0e2a289] add file1
 1 file changed, 1 insertion(+)
 create mode 100644 file1
[root@server1 demo]# git status -s  ##此时就无法看到文件的状态了


新添加的未跟踪文件前面有 ?? 标记,新添加到暂存区中的文件前面有 A 标记,修改过的文件前面有 M 标记。 你可能注意到了 M有两个可以出现的位置,出现在右边的 M 表示该文件被修改了但是还没放入暂存区,出现在靠左边的 M 表示该文件被修改了并放入了暂存区。
例如, README 文件在工作区被修改了但是还没有将修改后的文件放入暂存区,lib/simplegit.rb文件被修改了并将修改后的文件放入了暂存区。 而 Rakefile在工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录。

二:暂存已修改文件

1:在工作区修改文件
[root@server1 demo]# cat file1 
westos
[root@server1 demo]# echo westos >> file1 
[root@server1 demo]# git status -s
 M file1     ###该文件被修改了但是还没有被放进暂存区
[root@server1 demo]# cat file1 
westos
westos


2:将文件添加到暂存区并修改
[root@server1 demo]# git add file1  
[root@server1 demo]# git status -s
M  file1   ###该文件被修改了并放在了暂存区

3:工作区被修改并提交到暂存区后又在工作区中被修改了,所以在暂存区和工作区都有该文件被修改了的记录
[root@server1 demo]# echo westos >> file1 
[root@server1 demo]# cat file1 
westos
westos
westos
[root@server1 demo]# git status -s
MM file1    在暂存区和工作区都有该文件被修改了的记录

4:重新将文件放到暂存区
[root@server1 demo]# git add file1 
[root@server1 demo]# git status -s
M  file1

5:修改版本库中的file1
[root@server1 demo]# git commit -m "change file1"
[master e600422] change file1
 1 file changed, 2 insertions(+)


三:忽略文件

一般我们总会有些文件无需纳入 Git 的管理,也不希望它们总出现在未跟踪文件列表。 通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。
Git 忽略所有以 .o 或 .a 结尾的文件。一般这类对象文件和存档文件都是编译过程中出现的.
Git 忽略所有以波浪符(~)结尾的文件,许多文本编辑软件(比如 Emacs)都用这样的文件名保存副本

[root@server1 ~]# l.
.  ..  .bash_logout  .bash_profile  .bashrc  .cshrc  .gitconfig  .tcshrc
[root@server1 ~]# ls
demo
[root@server1 ~]# cd demo/
[root@server1 demo]# ls
file1
[root@server1 demo]# l.
.  ..  .bashrc  .git
[root@server1 demo]# ls
file1
[root@server1 demo]# vim .gitignore
.*       #忽略所有文件
[root@server1 demo]# git status -s
[root@server1 demo]# ls
file1
[root@server1 demo]# l.
.  ..  .git  .gitignore
[root@server1 demo]# git status -s    #看不到任何文件的状态


四:版本回退

一:此时在工作区对文件进行了修改还没有添加到缓存区中

(1):查看file1
[root@server1 demo]# cat file1 
westos
westos
westos

(2):在工作区修改文件file1
[root@server1 demo]# echo westos >> file1

(3):查看状态
[root@server1 demo]# 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:   file1        ###提示用git checkout来改变在工作区的文件
#
no changes added to commit (use "git add" and/or "git commit -a")

(4)执行 git checkout
[root@server1 demo]# git checkout -- file1

(5)查看状态,查看file1,发现恢复到原来的版本
[root@server1 demo]# git status 
# On branch master
nothing to commit, working directory clean
[root@server1 demo]# cat file1   ###恢复原来的3个westos
westos
westos
westos

在修改完文件之后没有没有提交到没有暂存区中,想倒退版本和iashi很简单的,就是下面的两步
[root@server1 demo]# echo westos >> file1 
[root@server1 demo]# cat file1 
westos
westos
westos
westos
[root@server1 demo]# git checkout -- file1
[root@server1 demo]# cat file1 
westos
westos
westos

(6) git log中可以很清楚的看到具体的操作信息
[root@server1 demo]# git log
commit e6004229ae82d828f4f9b251e478af8adf3d1602
Author: yz <[email protected]>
Date:   Tue Apr 9 18:41:14 2019 +0800

    change file1

commit 4e44801419198548545d2adc2773352a2b4ecdca
Author: yz <[email protected]>
Date:   Tue Apr 9 18:19:42 2019 +0800

    add file1

二:修改完文件后,并且提交到版本库中,如何做版本回退

(1):修改文件
[root@server1 demo]# echo westos > file1
[root@server1 demo]# cat file1 
westos

 (2):提交到版本库中
[root@server1 demo]# git status -s
 M file1
[root@server1 demo]# git add file1 
[root@server1 demo]# git commit -m "v3"   ###提交到版本库
[master c1aab78] v3
 1 file changed, 2 deletions(-)
[root@server1 demo]# git log  ####查看对版本库具体的操作
commit c1aab785f4a8124e5d28bca54c9fe104d8c45570
Author: yz <[email protected]>
Date:   Tue Apr 9 19:04:50 2019 +0800

    v3

commit e6004229ae82d828f4f9b251e478af8adf3d1602
Author: yz <[email protected]>
Date:   Tue Apr 9 18:41:14 2019 +0800

    change file1

commit 4e44801419198548545d2adc2773352a2b4ecdca
Author: yz <[email protected]>
Date:   Tue Apr 9 18:19:42 2019 +0800

    add file1

(3)显示完整的commit id 
[root@server1 demo]# git log --pretty=oneline
c1aab785f4a8124e5d28bca54c9fe104d8c45570 v3
e6004229ae82d828f4f9b251e478af8adf3d1602 change file1
4e44801419198548545d2adc2773352a2b4ecdca add file1

 (4)git-reflog是用来恢复本地错误操作很重要的一个命令bi
[root@server1 demo]# git reflog
c1aab78 HEAD@{0}: commit: v3
e600422 HEAD@{1}: commit: change file1
4e44801 HEAD@{2}: commit (initial): add file1

 (5)恢复之前的版本
[root@server1 demo]# cat file1 
westos
[root@server1 demo]# git reset --hard HEAD^   ###有几个^表示退回到第几层
HEAD is now at e600422 change file1
[root@server1 demo]# cat file1 
westos
westos
westos

 (6)已经退回到之前的版本,所以后来对版本库的文件的修改没有了
[root@server1 demo]# git log --pretty=oneline
e6004229ae82d828f4f9b251e478af8adf3d1602 change file1
4e44801419198548545d2adc2773352a2b4ecdca add file1

 (7)使用git reflog可以查看到进行的操作
[root@server1 demo]# git reflog
e600422 HEAD@{0}: reset: moving to HEAD^
c1aab78 HEAD@{1}: commit: v3
e600422 HEAD@{2}: commit: change file1
4e44801 HEAD@{3}: commit (initial): add file1

(8)也可以前面加版本的id,退回到任意的版本
[root@server1 demo]# git reset --hard c1aab78
HEAD is now at c1aab78 v3
[root@server1 demo]# cat file1 
westos

(9)使用git reflog可以查看到每一步操作
[root@server1 demo]# git reflog
c1aab78 HEAD@{0}: reset: moving to c1aab78
e600422 HEAD@{1}: reset: moving to HEAD^
c1aab78 HEAD@{2}: commit: v3
e600422 HEAD@{3}: commit: change file1
4e44801 HEAD@{4}: commit (initial): add file1
 
三:在工作区将文件被删除了,如何返回
[root@server1 demo]# rm -rf file1 
[root@server1 demo]# ls
[root@server1 demo]# 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:    file1
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@server1 demo]# git checkout -- file1
[root@server1 demo]# ls
file1
[root@server1 demo]# cat file1 
westos


四:删除文件,并且已经提交到版本库中
[root@server1 demo]# git rm file1   ###删除工作区文件
rm 'file1'
[root@server1 demo]# git status     ##查看状态
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#	deleted:    file1
#
[root@server1 demo]# git commit -m "del file1"   ###git commit -m + 此次操作的目的
[master b6625d0] del file1
 1 file changed, 1 deletion(-)
 delete mode 100644 file1

[root@server1 demo]# ls

[root@server1 demo]# git reflog   ###查看对版本库的操作
b6625d0 HEAD@{0}: commit: del file1
c1aab78 HEAD@{1}: reset: moving to c1aab78
e600422 HEAD@{2}: reset: moving to HEAD^
c1aab78 HEAD@{3}: commit: v3
e600422 HEAD@{4}: commit: change file1
4e44801 HEAD@{5}: commit (initial): add file1

[root@server1 demo]# git reset --hard c1aab78  ###返回到任意版本
HEAD is now at c1aab78 v3

[root@server1 demo]# ls
file1

猜你喜欢

转载自blog.csdn.net/yinzhen_boke_0321/article/details/89162471
今日推荐