Git(1) -- 入门知识


Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。

Git(1)—基础知识

1、git仓库

  • git init 命令用于在目录中创建Git仓库。在目录中执行 git init 后你可以看到在你的项目中生成了 .git 这个子目录,这就是你的 Git 仓库了,所有有关你的此项目的快照数据都存放在这里。

  • git init your_project 新建项目直接用GIT管理,会在当前路径下创建和your_project同名的文件夹

    **.git默认是隐藏的,可以用 ls -a 命令查看 **

$ git init
Initialized empty Git repository in D:/git学习/.git/

git init

  • git clone [url]克隆远程仓库
$ git clone https://gitee.com/ShanXiXiaoMoTou/spring-boot-study.git
Cloning into 'spring-boot-study'...
remote: Enumerating objects: 75, done.
remote: Counting objects: 100% (75/75), done.
remote: Compressing objects: 100% (59/59), done.
remote: Total 75 (delta 1), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (75/75), 27.85 KiB | 1.99 MiB/s, done.
Resolving deltas: 100% (1/1), done.

2、设置用户信息

  • 设置全局用户信息(对当前用户的所有仓库有效)
git config --global user.name your_username
git config --global user.email your_email

全局变量设置

  • 设置局部仓库用户信息(只对某个仓库有效)
git config --local user.name your_username
git config --local user.email your_email

3、Git 工作区、暂存区和版本库

Workspace: 工作区,就是你平时存放项目代码的地方

Index / Stage: 暂存区,用于临时存放你的改动,事实上它只是一个文件,保存即将提交到文件列表信息

Repository: 本地仓库,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本

Remote: 远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换

版本控制

4、 Git工作流程

git的工作流程一般是这样的:

1、在工作目录中添加、修改文件;

2、将需要进行版本管理的文件放入暂存区域;

3、将暂存区域的文件提交到git仓库。

因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)

git工作流程

5、文件的四种状态

Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制。通过git add 状态变为Staged。

Unmodify: 文件已入库未修改。 如果被修改会变为Modified。如果使用git rm移出版本库,成为Untracked文件。

Modified: 文件已修改。通过git add可进入暂存staged状态, 使用git checkout覆盖当前修改返回到unmodify状态。

Staged: 暂存状态。 执行git commit提交变为Unmodify状态。执行git reset HEAD filename取消暂存变为Modified。

文件状态变更

6、Git提交与修改

git add 将该文件添加到暂存区

命令 作用
git add [file1] [file2] … 添加一个或多个文件到暂存区
git add [dir] 添加指定目录到暂存区,包括子目录
git add . 添加当前目录下的所有文件到暂存区
wang@LAPTOP-4HQAPUSB MINGW64 /d/IdeaProjects/spring-boot-study (master)
$ git status -s
?? src/main/java/com/rrc/constant/

wang@LAPTOP-4HQAPUSB MINGW64 /d/IdeaProjects/spring-boot-study (master)
$ git add .
warning: LF will be replaced by CRLF in src/main/java/com/rrc/constant/CommonConst.java.
The file will have its original line endings in your working directory

wang@LAPTOP-4HQAPUSB MINGW64 /d/IdeaProjects/spring-boot-study (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   src/main/java/com/rrc/constant/CommonConst.java

git commit 提交暂存区到本地仓库

命令 作用
git commit -m [message] 提交暂存区到本地仓库中:
git commit [file1] [file2] … -m [message] 提交暂存区的指定文件到仓库区
git commit -a -a 参数设置修改文件后不需要执行 git add 命令,直接来提交

注:此时提交代码使用的用户信息就是我们在开始钱设置的用户信息(用户名和邮箱)

wang@LAPTOP-4HQAPUSB MINGW64 /d/IdeaProjects/spring-boot-study (master)
$ git commit -m "feat:删除标志位代码增加"
[master 761e5f6] feat:删除标志位代码增加
 1 file changed, 20 insertions(+)
 create mode 100644 src/main/java/com/rrc/constant/CommonConst.java

wang@LAPTOP-4HQAPUSB MINGW64 /d/IdeaProjects/spring-boot-study (master)
$ git reset --soft HEAD^

wang@LAPTOP-4HQAPUSB MINGW64 /d/IdeaProjects/spring-boot-study (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        new file:   src/main/java/com/rrc/constant/CommonConst.java

git reset 回退版本,可以指定退回某一次提交的版本

git reset [–soft | –mixed | –hard] [HEAD]

  • 撤销git commit操作

    git reset –soft HEAD^

    HEAD^的意思是上一个版本,也可以写成HEAD~1。如果你进行了2次commit,想都撤回,可以使用HEAD~2

    –mixed(默认参数)

    git reset –mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

    不删除工作空间改动代码,撤销commit,并且撤销git add . 操作

    –soft
    不删除工作空间改动代码,撤销commit,不撤销git add .

    –hard
    删除工作空间改动代码,撤销commit,撤销git add .
    注意完成这个操作后,就恢复到了上一次的commit状态。

$ git status
On branch master
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

nothing to commit, working tree clean

wang@LAPTOP-4HQAPUSB MINGW64 /d/IdeaProjects/spring-boot-study (master)
$ git reset head^

wang@LAPTOP-4HQAPUSB MINGW64 /d/IdeaProjects/spring-boot-study (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        src/main/java/com/rrc/constant/

nothing added to commit but untracked files present (use "git add" to track)
  • 取消之前 git add 添加,但不希望包含在下一提交快照中的缓存

    git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了

    git reset HEAD 文件名 就是对某个文件进行撤销了

wang@LAPTOP-4HQAPUSB MINGW64 /d/IdeaProjects/spring-boot-study (master)
$ git reset Head

wang@LAPTOP-4HQAPUSB MINGW64 /d/IdeaProjects/spring-boot-study (master)
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        src/main/java/com/rrc/constant/

nothing added to commit but untracked files present (use "git add" to track)
  • 撤销对远程仓库的push操作

    获取需要回退的版本号

    执行 git reset –-soft <版本号> ,重置至指定版本的提交,达到撤销提交的目的

    执行 git push origin 分支名 –-force ,强制提交当前版本号,完成push撤销

D:\IdeaProjects\spring-boot-study>git log
commit 6c8685349e4fb3fefbb1d4cf2be351e4e2a61a70 (HEAD -> master, origin/master)
Author: 王清雷 <wangqing@ren.com>
Date:   Wed Jun 23 00:06:29 2021 +0800

    feat:测试回滚操作

commit fe056300b80f84a2caf9d92662d94e8e3fe218f1
Merge: a42c966 83f0da7
Author: 王清雷 <wangqing@ren.com>
Date:   Sun Jun 20 01:37:37 2021 +0800

    Merge remote-tracking branch 'origin/master'

D:\IdeaProjects\spring-boot-study>git reset --soft  fe056300b80f84a2caf9d92662d94e8e3fe218f1

D:\IdeaProjects\spring-boot-study>git push origin master --force
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/qinglei1989/spring-boot-study.git
 + 6c86853...fe05630 master -> master (forced update)

文章作者: WangQingLei
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 WangQingLei !
  目录