抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

背景知识^1

下文[]中的均为相关变量名,大多数均为自定义或已存在。

$ 后默认为指令,行开头无 $ 的默认为指令的输出

可以使用 git help 查看相关的文档

git 命令和编程一样,我认为要愿意去尝试,有了疑惑可以考虑先自己在测试环境中尝试,或许你会恍然大悟

通过实际操作学习git^2

基本操作

git init

初始化git仓库,如果创建成功目录下则会生成 .git 目录(默认隐藏), 其中含有之前的历史快照。

git status

查看当前仓库的状态。

$ git status
On branch main
Your branch is up to date with 'origin/main'.

Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   Folder1/1-1.txt

git add

向暂存区中添加文件,commit 前的必要操作,将文件移入暂存区。

git commit

保存仓库的历史记录,能够帮助我们更好的进行版本控制,可以使用 -m 选项记述一行提交信息,或不加 -m 记述详细的提交信息。

$ git commit -m "Test"
[main aa34371] Test
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 Folder2/2-1.txt

git log

查看仓库的提交日志,包括什么人在什么时候进行了提交或合并,以及操作前后有怎样的差别。

-pretty=short 只显示提交信息的第一行

[fileName] 只显示该目录或文件的日志

-p 显示文件的前后差别

$ git log

commit aa343**********99b6d8**********bffc0b225a (HEAD -> main, origin/main, origin/HEAD)
Author: **** <********@*****.com>
Date:   Wed Apr 13 19:46:52 2022 +0800

    Test

commit f**********5455a486**********ff09cbf6aea
Merge: 186b6f5 1cdd417
Author: **** <********@*****.com>
Date:   Wed Apr 13 19:44:33 2022 +0800

    Merge branch 'main' of github.com:Fuxx-1/test_repository

commit 186b6f5721f51**********1070afe**********19
Author: **** <********@*****.com>
Date:   Wed Apr 13 19:43:01 2022 +0800

    insert new flie 1-1.txt

commit 1cdd417980**********bdb9**********fcfeac
Author: **** <********@*****.com>
Date:   Wed Apr 13 19:37:54 2022 +0800

    add file 1-1

git diff

查看更改前后的差别,不加选项默认查看工作树和暂存区的差别,加 Head 选项后可查看工作树和最新提交的差别

diff --git a/Folder1/1-1.txt b/Folder1/1-1.txt
index 2319ba4..7c5a75b 100644
--- a/Folder1/1-1.txt
+++ b/Folder1/1-1.txt
@@ -1 +1,2 @@
-1-1
\ No newline at end of file
+1-1
+test
\ No newline at end of file

分支操作

git branch

显示分支一览表,将分支名列表显示,同时可以确定当前所在分支,带 * 的为当前所在分支。

$ git branch
* main

git checkout -b [branchName]

创建并切换分支,以当前分支为基础创建新的分支

$ git checkout -b featureA
Switched to a new branch 'featureA'

以上命令等同

$ git branch featureA
$ git checkout featureA

此时显示分支一览表

$ git branch
* featureA
  main

git merge

HotFix 分支合并到主分支

$ git checkout main
Switched to branch 'main'
Your branch is up to date with 'origin/main'.
$ git merge hotFixBug
Updating 7d050ad..1bcbe8a
Fast-forward
 Folder1/1-1.txt | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
$ git push
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 357 bytes | 89.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:****/test_rep****ory.git
   7d050ad..1bcbe8a  main -> main

featureA 分支合并到主分支

$ git merge featureA
Merge made by the 'recursive' strategy.
 featureA.txt | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 featureA.txt
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 294 bytes | 294.00 KiB/s, done.
Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To github.com:****/test_rep****ory.git
   1bcbe8a..fd33b74  main -> main
$ git log --graph
*   commit fd33b74371b0*****7a88*****2f56*****c59f8 (HEAD -> main, origin/main, origin/HEAD)
|\  Merge: 1bcbe8a fab1fc2
| | Author: **** <********@*****.com>
| | Date:   Wed Apr 13 20:45:20 2022 +0800
| |
| |     Merge branch 'featureA'
| |
| * commit fab1fc2c*****2b2ae1a*****51a4c222*****b0 (origin/featureA, featureA)
| | Author: **** <********@*****.com>
| | Date:   Wed Apr 13 20:18:43 2022 +0800
| |
| |     add true featureA
| |
* | commit 1bcbe8acb*****656d154e*****4fb60*****5ed
|/  Author: **** <********@*****.com>
|   Date:   Wed Apr 13 20:41:21 2022 +0800
|
|       hotFixBug
|
* commit 7d050a*****350478d*****ae1acaf*****75755
| Author: **** <********@*****.com>
| Date:   Wed Apr 13 20:09:47 2022 +0800
|
|     add featureA
|
 

相关问题

问题1:撤销 commitadd

  • 已经commit -m ""了,代码进入了本地仓库和远端仓库的中间站,需要撤回:
$ git reset --soft HEAD^

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

  • 已经git add. 了,想撤回:
$ git reset HEAD
  • 补充选项:

–mixed
意思是:不删除工作空间改动代码,撤销commit,并且撤销git add . 操作
这个为默认参数,git reset –mixed HEAD^ 和 git reset HEAD^ 效果是一样的。

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

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

问题2:修改commit

$ git commit --amend

后记

相关知识可参考[git官方教程](Git - 关于版本控制 (git-scm.com))和[廖雪峰的Git教程](Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com))

实际环境往往比学习环境更复杂

评论