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 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)
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)