Git基础

273 阅读4分钟

下载 安装

https://git-scm.com/download/win

初始化

进入需要版本管理的目录,右键Git Bash Here,输入 git init 命令为当前项目初始化git,目录下会出现一个.git的隐藏文件夹,git就可以开始管理目录内的文件了

$ git init

检测文件状态

执行 git status 检测当前文件夹下的文件状态,文件被分为了 改变已提交改变还未提交没有版本控制文件

$ git status

添加到版本控制

执行 git add 命令对对应文件添加版本控制

$ git add index.html

或者后面加 . 给所有文件添加版本控制,再次输入 git status 查看

$ git add .

生成版本

通过命令生成版本,版本描述命名版本

$ git commit -m 'v1'

第一次生成版本会弹出信息,提示设置全局的 git 邮箱和用户名

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  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 'xxxx@DESKTOP-xxxxxx.(none)')

执行命令添加邮箱和用户名

$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"

再次执行,绿色文件名会变为白色,并生成版本控制

$ git commit -m 'v1'
[master (root-commit) ad97762] v1
 329 files changed, 14512 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 README.md
 create mode 100644 babel.config.js
........

执行 git status ,显示没有东西需要提交

$ git status
On branch master
nothing to commit, working tree clean

提交修改

完成以上操作就可以继续编写项目了,被修改过的文件

Git Bash Here 内输入命令可以查看项目状态为 红色

$ git status
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   src/App.vue

no changes added to commit (use "git add" and/or "git commit -a")

执行命令 $ git add . 把变更过的文件全部添加到管理,git status查看会变为 绿色,如果有下面的警告,意思是更换行尾结束符,会后会完成添加,但是没有生成新版本

$ git add .
warning: LF will be replaced by CRLF in src/App.vue.
The file will have its original line endings in your working directory

想要生成新版本的话,需要再次执行命令,提交之后就生成了两个版本

$ git commit -m 'v2'
[master 6e26dce] v2
 1 file changed, 1 deletion(-)

通过 git log 查看全部版本

$ git log
commit 6e26dce2b3ccd4f4872c97cd41f042d6f837819e (HEAD -> master)
Author: Max <xxxxxxxxx@qq.com>
Date:   Sun Jun 7 14:49:52 2020 +0800

    v2

commit ad97762a2807323532bfbb3f891d991a0979ce56
Author: Max <xxxxxxxxx@qq.com>
Date:   Sun Jun 7 13:07:17 2020 +0800

    v1

~ 以上总结五个命令

  • $ git init — 初始化
  • $ git status — 查看状态
  • $ git add . — 添加到管理
  • $ git commit -m '版本名' — 生成版本
  • $ git log — 查看全部版本

三大区域

  • 工作区 被修改的文件 — 红色
  • 暂存区 提交修改过的文件 — 绿色
  • 版本库 执行$ git commit -m ' ' 命令后项目被存储的位置

回滚

如果需要返回以前版本,需要 git log 查看后

输入命令 hard 后,双击选中上面的版本号,鼠标右键 Copy,右键 Paste 粘贴到 hard 后面

$ git reset --hard 6e26dce2b3ccd4f4872c97cd41f042d6f837819e
HEAD is now at ad97762 v1

项目就会回滚到这个版本的状态,通过 git log 查看,之前版本会消失

撤销回滚 需要用到另一个命令,来查看回滚之前的版本: git reflog

$ git reflog
ad97762 (HEAD -> master) HEAD@{0}: reset: moving to ad97762a2807323532bfbb3f891d991a0979ce56
6e26dce HEAD@{1}: commit: v2
ad97762 (HEAD -> master) HEAD@{2}: commit (initial): v1

中间这行是之前被回滚的版本号,重新输入这个命令并粘贴版本号,回车完成回滚

$ git reset --hard 6e26dce

分支

输入如下命令,显示 *master ,表示现在所处的分支,项目主干默认为 master

$ git branch
*master

输入命令 创建 名为dev的分支

$ git branch dev

输入命令 切换 到dev分支

$ git checkout dev
Switched to branch 'dev'

接下来修改项目之后,执行命令创建新的版本

$ git status //查看项目状态
$ git add . //添加版本管理
$ git commit -m 'v3' //创建新的版本
[dev b0cc1a6] v3
 1 file changed, 3 insertions(+)

现在 git log 查看,正在编辑的版本就在 dev 分支了 (HEAD -> dev)

$ git log
commit b0cc1a69886b9dbb59528fd846f150872b7f5fc5 (HEAD -> dev)
Author: Max <xxxxxxxxx@qq.com>
Date:   Sun Jun 7 18:57:40 2020 +0800

    v3

commit 6e26dce2b3ccd4f4872c97cd41f042d6f837819e (master)
Author: Max <xxxxxxxxx@qq.com>
Date:   Sun Jun 7 14:49:52 2020 +0800

    v2

commit ad97762a2807323532bfbb3f891d991a0979ce56
Author: Max <xxxxxxxxx@qq.com>
Date:   Sun Jun 7 13:07:17 2020 +0800

    v1

完成编写后,对当前dev分支 git add . git commit -m 'v4' 提交创建新的版本号

$ git add .
$ git commit -m 'v4'
[dev 2a26714] v4
 1 file changed, 1 insertion(+), 1 deletion(-)

之后就可以通过 git checkout master 回到master版本号,上一步骤没有完成提交就切换版本,是会报错的

之后就可以通过 git checkout 命令在各个分支之间切换了

Max@DESKTOP-xxxxxxx MINGW64 ~/Desktop/ug (dev)
$ git checkout master
Switched to branch 'master'

Max@DESKTOP-xxxxxxx MINGW64 ~/Desktop/ug (master)
$ git checkout dev
Switched to branch 'dev'

合并版本

合并版本前,要切换到 master 主分支,把 dev 分支的新代码拉过来

$ git branch //查看所处的分支
* dev
  master
  
$ git checkout master
Switched to branch 'master'

合并的命令为 git merge:

$ git merge dev
Updating 6e26dce..2a26714
Fast-forward
 src/App.vue | 3 +++
 1 file changed, 3 insertions(+)

删除分支

不再需要的分支可以通过命令删除

$ git branch -d dev
Deleted branch dev (was 2a26714).

合并冲突

当合并出现同一段代码不一样的情况时,会报错,并通过特殊方式合并代码,将冲突的两端代码分隔开,通过判断是否保留原代码中哪部分,去掉开发分支内旧版本的代码,手动修复冲突

<<<<<<< HEAD
//master原代码
=======
//dev新代码
>>>>>>> dev

然后提交新版本

$ git status
$ git add . 
$ git commit -m '解决bug/合并dev/解决冲突 v4'
[master 7098870] 解决bug/合并dev v4
 1 file changed, 1 insertion(+), 1 deletion(-)

~ 以上总结五个命令

  • $ git branch — 查看分支
  • $ git branch dev — 创建dev分支
  • $ git checkout master — 切换分支到master
  • $ git merge dev — 将dev分支的新代码合并到当前分支,注意一定要先切换回 - 主分支,可能会缠身冲突,找到并手动处理
  • $ git branch -d dev — 删除dev分支

工作流

为了工作操作规范,创建新项目,最基础,最少创建两个分支,默认分支 master 和 dev,master 只保留正式版本,代码在 dev 写

​ ↙ | v1 | ← debug

→ master | v1 | ← ← ← | v3 | 正式版本

​ → dev ( 开发 ) ↖ | v2 | ← | v3 | ↙