一篇博客帶你上手Git
概述
安裝Git
下載官方網站,下載后安裝包樣式:
雙擊安裝,安裝成功后右鍵文件會有如下選項
證明安裝成功。
基本配置
- 設置用戶信息,桌面右鍵,選擇Git bash here
hecheng@LAPTOP-OJQFEH00 MINGW64 ~/Desktop
$ git config --global user.name "hecheng"
hecheng@LAPTOP-OJQFEH00 MINGW64 ~/Desktop
$ git config --global user.email "hecheng@qq.com"
自己編寫自己的用戶名和郵箱,之后可以查看,效果如下
基本操作
- 創建文件——>提交到緩存區——>提交到倉庫
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest
$ git init
Initialized empty Git repository in E:/GitTest/.git/
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ ll
total 8
drwxr-xr-x 1 hecheng 197121 0 7月 17 16:18 ./
drwxr-xr-x 1 hecheng 197121 0 7月 17 16:17 ../
drwxr-xr-x 1 hecheng 197121 0 7月 17 16:18 .git/
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ touch file01.txt
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
file01.txt
nothing added to commit but untracked files present (use "git add" to track)
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git add .
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: file01.txt
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git commit -m "add file01"
[master (root-commit) e205281] add file01
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file01.txt
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git status
On branch master
nothing to commit, working tree clean
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git log
commit e2052811960420feb66b8b7bef48980537ea859b (HEAD -> master)
Author: hecheng <hecheng@qq.com>
Date: Mon Jul 17 16:30:35 2023 +0800
add file01

- 修改文件后,文件又進入工作區
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git status
On branch master
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: file01.txt
no changes added to commit (use "git add" and/or "git commit -a")
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git add .
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: file01.txt
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git commit -m "update file01"
[master 033fcd2] update file01
1 file changed, 1 insertion(+)
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git log
commit 033fcd2c7386e611bff68c325ab2c770e075f014 (HEAD -> master)
Author: hecheng <hecheng@qq.com>
Date: Mon Jul 17 16:36:21 2023 +0800
update file01
commit e2052811960420feb66b8b7bef48980537ea859b
Author: hecheng <hecheng@qq.com>
Date: Mon Jul 17 16:30:35 2023 +0800
add file01

- 版本回退
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git-log
* 033fcd2 (HEAD -> master) update file01
* e205281 add file01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git reset --hard e205281
HEAD is now at e205281 add file01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git-log
* e205281 (HEAD -> master) add file01

- 查看已刪除的記錄
$ git reflog
033fcd2 (HEAD -> master) HEAD@{0}: reset: moving to 033fcd2
e205281 HEAD@{1}: reset: moving to e205281
033fcd2 (HEAD -> master) HEAD@{2}: commit: update file01
e205281 HEAD@{3}: commit (initial): add file01

Git分支
- 查看,創建,切換分支
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git branch
* master
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git branch dev01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git-log
* 033fcd2 (HEAD -> master, dev01) update file01
* e205281 add file01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ touch .gitignore
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git status
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
nothing added to commit but untracked files present (use "git add" to track)
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git add .
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: .gitignore
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git commit -m "add ignore file"
[master 4008424] add ignore file
1 file changed, 1 insertion(+)
create mode 100644 .gitignore
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git status
On branch master
nothing to commit, working tree clean
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git-log
* 4008424 (HEAD -> master) add ignore file
* 033fcd2 (dev01) update file01
* e205281 add file01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git checkout dev01
Switched to branch 'dev01'
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev01)
$ git checkout master
Switched to branch 'master'
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git checkout -b dev02
Switched to a new branch 'dev02'

- 合并、刪除分支
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev02)
$ git checkout master
Switched to branch 'master'
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git-log
* 4008424 (HEAD -> master, dev02) add ignore file
* 033fcd2 (dev01) update file01
* e205281 add file01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git checkout dev01
Switched to branch 'dev01'
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev01)
$ touch file02.txt
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev01)
$ git add .
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev01)
$ git commit -m 'add file02'
[dev01 f2a85f1] add file02
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file02.txt
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev01)
$ git-log
* f2a85f1 (HEAD -> dev01) add file02
| * 4008424 (master, dev02) add ignore file
|/
* 033fcd2 update file01
* e205281 add file01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev01)
$ git checkout master
Switched to branch 'master'
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git merge dev01
Merge made by the 'ort' strategy.
file02.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file02.txt
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git-log
* c3ebaa2 (HEAD -> master) Merge branch 'dev01'
|\
| * f2a85f1 (dev01) add file02
* | 4008424 (dev02) add ignore file
|/
* 033fcd2 update file01
* e205281 add file01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git branch -d dev02
Deleted branch dev02 (was 4008424).
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git-log
* c3ebaa2 (HEAD -> master) Merge branch 'dev01'
|\
| * f2a85f1 (dev01) add file02
* | 4008424 add ignore file
|/
* 033fcd2 update file01
* e205281 add file01

強制刪除
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git-log
* 88d63ff (dev02) abcde
* b357906 (HEAD -> master) Merge branch 'dev'
|\
| * b6c3192 update file01 count-2
* | d9ed7d0 update file01 count-3
|/
* c3ebaa2 Merge branch 'dev01'
|\
| * f2a85f1 add file02
* | 4008424 add ignore file
|/
* 033fcd2 update file01
* e205281 add file01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git branch -d dev02
error: The branch 'dev02' is not fully merged.
If you are sure you want to delete it, run 'git branch -D dev02'.
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git branch -D dev02
Deleted branch dev02 (was 88d63ff).
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git-log
* b357906 (HEAD -> master) Merge branch 'dev'
|\
| * b6c3192 update file01 count-2
* | d9ed7d0 update file01 count-3
|/
* c3ebaa2 Merge branch 'dev01'
|\
| * f2a85f1 add file02
* | 4008424 add ignore file
|/
* 033fcd2 update file01
* e205281 add file01

- 解決沖突
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git checkout -b dev
Switched to a new branch 'dev'
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev)
$ git status
On branch dev
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: file01.txt
no changes added to commit (use "git add" and/or "git commit -a")
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev)
$ git add .
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev)
$ git commit -m "update file01 count-2"
[dev b6c3192] update file01 count-2
1 file changed, 1 insertion(+), 1 deletion(-)
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev)
$ git-log
* b6c3192 (HEAD -> dev) update file01 count-2
* c3ebaa2 (master) Merge branch 'dev01'
|\
| * f2a85f1 add file02
* | 4008424 add ignore file
|/
* 033fcd2 update file01
* e205281 add file01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (dev)
$ git checkout master
Switched to branch 'master'
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git add .
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git commit -m "update file01 count-3"
[master d9ed7d0] update file01 count-3
1 file changed, 1 insertion(+), 1 deletion(-)
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
Merge branch 'dev'
[master b357906] Merge branch 'dev'
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git-log
* b357906 (HEAD -> master) Merge branch 'dev'
|\
| * b6c3192 (dev) update file01 count-2
* | d9ed7d0 update file01 count-3
|/
* c3ebaa2 Merge branch 'dev01'
|\
| * f2a85f1 add file02
* | 4008424 add ignore file
|/
* 033fcd2 update file01
* e205281 add file01

- 分支創建原則
master,主分支,用于發行的版本,develop,開發的分支,feature(可以刪除),功能的分支,hotfix,修復bug的分支,feature合并到develop,develop合并到master,用戶反饋到bug,創建hotfix分支,寫好修復代碼后,分別合并到master分支和develop分支。
四、遠程倉庫
1.
創建碼云賬戶,創建倉庫,獲取公匙。
再連接本地倉庫與遠程倉庫(添加遠程倉庫:git remote add 遠端名稱 倉庫路徑),查看遠程倉庫,將代碼推送到遠程倉庫(git push 遠端名稱 本地分支名:遠端分支名),查看關聯關系:git branch -vv
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git remote add origin git@gitee.com:hecheng11223/git_-test.git
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git remote
origin
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git push origin master
Enumerating objects: 22, done.
Counting objects: 100% (22/22), done.
Delta compression using up to 16 threads
Compressing objects: 100% (14/14), done.
Writing objects: 100% (22/22), 1.82 KiB | 621.00 KiB/s, done.
Total 22 (delta 3), reused 0 (delta 0), pack-reused 0
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:hecheng11223/git_-test.git
* [new branch] master -> master
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git push origin master:master
Everything up-to-date
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git push --set-upstream origin master
Everything up-to-date
branch 'master' set up to track 'origin/master'.
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git push
Everything up-to-date
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/GitTest (master)
$ git branch -vv
* master b357906 [origin/master] Merge branch 'dev'

2.
從遠程倉庫克隆
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/Git_Study
$ git clone git@gitee.com:hecheng11223/git_-test.git hello-git
Cloning into 'hello-git'...
remote: Enumerating objects: 22, done.
remote: Counting objects: 100% (22/22), done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 22 (delta 3), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (22/22), done.
Resolving deltas: 100% (3/3), done.
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/Git_Study/hello-git (master)
$ git-log
* b357906 (HEAD -> master, origin/master, origin/HEAD) Merge branch 'dev'
|\
| * b6c3192 update file01 count-2
* | d9ed7d0 update file01 count-3
|/
* c3ebaa2 Merge branch 'dev01'
|\
| * f2a85f1 add file02
* | 4008424 add ignore file
|/
* 033fcd2 update file01
* e205281 add file01
從遠程倉庫抓取和拉取
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/Git_Study/hello-git (master)
$ git fetch
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 229 bytes | 76.00 KiB/s, done.
From gitee.com:hecheng11223/git_-test
b357906..c9b33a5 master -> origin/master
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/Git_Study/hello-git (master)
$ git-log
* c9b33a5 (origin/master, origin/HEAD) add file03
* b357906 (HEAD -> master) Merge branch 'dev'
|\
| * b6c3192 update file01 count-2
* | d9ed7d0 update file01 count-3
|/
* c3ebaa2 Merge branch 'dev01'
|\
| * f2a85f1 add file02
* | 4008424 add ignore file
|/
* 033fcd2 update file01
* e205281 add file01
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/Git_Study/hello-git (master)
$ git merge origin/master
Updating b357906..c9b33a5
Fast-forward
file04.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file04.txt
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/Git_Study/hello-git (master)
$ git pull
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (2/2), 208 bytes | 69.00 KiB/s, done.
From gitee.com:hecheng11223/git_-test
c9b33a5..418f89f master -> origin/master
Updating c9b33a5..418f89f
Fast-forward
file05.txt | 0
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 file05.txt
hecheng@LAPTOP-OJQFEH00 MINGW64 /e/Git_Study/hello-git (master)
$ git-log
* 418f89f (HEAD -> master, origin/master, origin/HEAD) add file05
* c9b33a5 add file03
* b357906 Merge branch 'dev'
|\
| * b6c3192 update file01 count-2
* | d9ed7d0 update file01 count-3
|/
* c3ebaa2 Merge branch 'dev01'
|\
| * f2a85f1 add file02
* | 4008424 add ignore file
|/
* 033fcd2 update file01
* e205281 add file01


浙公網安備 33010602011771號