背景知识^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:撤销 commit
或 add
- 已经
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))
实际环境往往比学习环境更复杂