22.9 分支管理

22.9 分支管理

一、分支管理:

git branch //查看分支
git branch aming //建立分支
git checkout aming //切換到了aming分支下
再用git branch查看,會看到有兩個分支master和aming,當前使用的分支前面會有一個*在aming分支下 ,編輯2.txt,並提交到新分支
echo "askdfjlksadjflk" > 2.txt
git add 2.txt
git commit -m "laksjdflksjdklfj"
切換回master分支
git checkout master //此時cat 2.txt發現並無更改內容git


##本地分支建立--注意 這個是本地分支:
[root@Dasoncheng gitroot]# git branch
* master
[root@Dasoncheng gitroot]# git branch aming
[root@Dasoncheng gitroot]# git branch
  aming
* master
[root@Dasoncheng gitroot]# git checkout aming 
Switched to branch 'aming'
[root@Dasoncheng gitroot]# git add .
[root@Dasoncheng gitroot]# git commit -m "add branch aming"
# On branch aming
nothing to commit, working directory clean
##在分支aming上面建立文件aming.txt,到master分支查看:
[root@Dasoncheng gitroot]# echo "aaaaaaaa" > aming.txt
[root@Dasoncheng gitroot]# git add aming.txt
[root@Dasoncheng gitroot]# git commit -m "add a file of aming.txt"
 1 file changed, 1 insertion(+)
 create mode 100644 aming.txt
[root@Dasoncheng gitroot]# ll
total 12
-rw-r--r-- 1 root root 21 Nov  7 11:04 1.txt
-rw-r--r-- 1 root root 15 Nov  7 16:36 2.txt
-rw-r--r-- 1 root root  9 Nov  8 15:26 aming.txt
[root@Dasoncheng gitroot]# git checkout master 
Switched to branch 'master'
[root@Dasoncheng gitroot]# ll
total 8
-rw-r--r-- 1 root root 21 Nov  7 11:04 1.txt
-rw-r--r-- 1 root root 15 Nov  7 16:36 2.txt
##能夠看出,這兩個分支的文件是分開保存的(分支對文件的操做不受影響);下一部分咱們來合併分支!!

提問1:如何在github上面建立分支? --3裏面有詳細講解:
在本地新建一個分支: git branch Branch1
切換到你的新分支: git checkout Branch1
將新分支發佈在github上: git push origin Branch1
在本地刪除一個分支: git branch -d Branch1
提問2:如何建立本地分支呢?
[root@Dasoncheng learning]# git branch aming ##建立本地分支aming;
[root@Dasoncheng learning]# git branch
aming
*master
[root@Dasoncheng learning]# git checkout aming ##切換到分支aming;
Switched to branch 'aming'
[root@Dasoncheng learning]# git add .
[root@Dasoncheng learning]# git commit -m "add a new branch"
提交就能夠了;
其餘不懂的能夠:git branch --help 更多命令相似;github

二、分支的合併:

git checkout master //合併分支以前,先切換到目標分支
git merge aming //把aming分支合併到了master
若是master分支和aming分支都對2.txt進行了編輯,當合並時會提示衝突,須要先解決衝突才能夠繼續合併。
解決衝突的方法是在master分支下,編輯2.txt,改成aming分支裏面2.txt的內容。 而後提交2.txt,再合併aming分支。
可是這樣有一個問題,萬一master分支更改的內容是咱們想要的呢? 能夠編輯2.txt內容,改成想要的,而後提交。切換到aming分支,而後合併master分支到aming分支便可(倒着合併)。合併分支有一個原則,那就是要把最新的分支合併到舊的分支。也就是說merge後面跟的分支名字必定是最新的分支。
git branch -d aming //刪除分支
若是分支沒有合併,刪除以前會提示,那就不合並,強制刪除
git branch -D amingvim

那麼問題就來了,若是咱們想aming和master兩個分支的文件同樣怎麼作(這個是一次性合併 不一樣分支修改相同文件,仍是不會影響)?咱們能夠合併分支!!
如今master和aming分支都有2.txt,但內容不同 咱們合併試試:緩存

[root@Dasoncheng gitroot]# git branch
* aming
  master
[root@Dasoncheng gitroot]# git checkout master
Switched to branch 'master'
[root@Dasoncheng gitroot]# git merge aming
Updating 8d12096..8ebe1fa
Fast-forward
 2.txt | 2 --
 1 file changed, 2 deletions(-)
[root@Dasoncheng gitroot]# ll
total 8
-rw-r--r-- 1 root root 21 Nov  7 11:04 1.txt
-rw-r--r-- 1 root root  4 Nov  8 16:15 2.txt
[root@Dasoncheng gitroot]# cat 2.txt 
aaa
##合併成功;沒有報錯,2.txt內容是aming裏面的。
##合併分支有一個原則,那就是要把最新的分支合併到舊的分支。也就是說merge後面跟的分支名字必定是最新的分支。
##接下來咱們在兩個分支裏面 都修改2.txt並提交:
[root@Dasoncheng gitroot]# git branch
  aming
* master
[root@Dasoncheng gitroot]# echo 'bbb' >> 2.txt
[root@Dasoncheng gitroot]# git add 2.txt
[root@Dasoncheng gitroot]# git commit -m "ch 2.txt"
[master c1153a0] ch 2.txt
 1 file changed, 1 insertion(+)
[root@Dasoncheng gitroot]# git checkout aming 
Switched to branch 'aming'
[root@Dasoncheng gitroot]# vim 2.txt 
[root@Dasoncheng gitroot]# echo 'ccc' >> 2.txt
[root@Dasoncheng gitroot]# git add 2.txt
[root@Dasoncheng gitroot]# git commit -m "ch 2.txt aming"
[aming 3a53834] ch 2.txt aming
 1 file changed, 1 insertion(+)
[root@Dasoncheng gitroot]# git checkout master 
Switched to branch 'master'
[root@Dasoncheng gitroot]# git merge aming  ##將aming合併到master;
Auto-merging 2.txt
CONFLICT (content): Merge conflict in 2.txt
Automatic merge failed; fix conflicts and then commit the result.
[root@Dasoncheng gitroot]# cat 2.txt 
aaa
<<<<<<< HEAD
bbb
=======
ccc
>>>>>>> aming
##上面報錯了!咱們打開衝突文件2.txt 裏面記錄了 修改的信息;兩個文件不同 有衝突,那咱們如何合併 解決衝突呢?
##根據需求,查看那個分支下的2.txt是咱們須要的 將另外一個2.txt修改成咱們須要的內容,保持兩個文件的內容一致(即保證兩邊沒有衝突) 那麼合併就沒有問題了
[root@Dasoncheng gitroot]# git branch
  aming
* master
[root@Dasoncheng gitroot]# echo 'bbb' >> 2.txt  ##master分支修改2.txt
[root@Dasoncheng gitroot]# git add 2.txt
[root@Dasoncheng gitroot]# git commit -m "ch 2.txt"
[master c1153a0] ch 2.txt
 1 file changed, 1 insertion(+)
[root@Dasoncheng gitroot]# git checkout aming 
Switched to branch 'aming'
[root@Dasoncheng gitroot]# vim 2.txt 
[root@Dasoncheng gitroot]# echo 'ccc' >> 2.txt  ##aming分支修改2.txt
[root@Dasoncheng gitroot]# git add 2.txt
[root@Dasoncheng gitroot]# git commit -m "ch 2.txt aming"
1 file changed, 1 insertion(+)
[root@Dasoncheng gitroot]# git checkout master 
Switched to branch 'master'
[root@Dasoncheng gitroot]# git merge aming  ##切換到master合併aming分支:
Auto-merging 2.txt
CONFLICT (content): Merge conflict in 2.txt
Automatic merge failed; fix conflicts and then commit the result.  ##合併報錯:指明2.txt有衝突;master的2.txt是我須要的 那麼我到aming裏面合併master便可!!
[root@Dasoncheng gitroot]# cat 2.txt 
aaa
<<<<<<< HEAD
bbb
=======
ccc
>>>>>>> aming
[root@Dasoncheng gitroot]# git checkout aming  ##但這裏沒法切換aming,咱們先解決當前的問題;
2.txt: needs merge
error: you need to resolve your current index first
[root@Dasoncheng gitroot]# git status  ##查看狀態究竟是怎麼回事?
# On branch master
# You have unmerged paths.
#   (fix conflicts and run "git commit")
#
# Unmerged paths:
#   (use "git add <file>..." to mark resolution)
#
#	both modified:      2.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@Dasoncheng gitroot]# git add 2.txt  ##按照提示 咱們一步一步來:
[root@Dasoncheng gitroot]# git commit -m "ch 2.txt"
[root@Dasoncheng gitroot]# cat 2.txt 
aaa
<<<<<<< HEAD
bbb
=======
ccc
>>>>>>> aming
[root@Dasoncheng gitroot]# vim 2.txt   ##將master的2.txt修改成咱們須要的;
[root@Dasoncheng gitroot]# git add 2.txt
[root@Dasoncheng gitroot]# git commit -m "ch 2.txt"
 1 file changed, 3 deletions(-)
[root@Dasoncheng gitroot]# git checkout aming   #切換到aming分支 進行反合併;
Switched to branch 'aming'
[root@Dasoncheng gitroot]# cat 2.txt 
aaa
ccc
[root@Dasoncheng gitroot]# git merge master
Updating 3a53834..4d0e891
Fast-forward
 2.txt | 1 +
 1 file changed, 1 insertion(+)
[root@Dasoncheng gitroot]# cat 2.txt 
aaa
bbb
ccc
##git branch -d 後面接分支名,刪除分支 -D強制刪除分支;更多git branch --help
[root@Dasoncheng gitroot]# git branch -d aming
Deleted branch aming (was 4d0e891).
[root@Dasoncheng gitroot]# git branch 
* master

三、使用分支的原則:

對於分支的應用,建議你們以這樣的原則來:
master分支是很是重要的,線上發佈代碼用這個分支,平時咱們開發代碼不要在這個分支上。
建立一個dev分支,專門用做開發,只有當發佈到線上以前,纔會把dev分支合併到master 開發人員應該在dev的基礎上再分支成我的分支,我的分支(在本身pc上)裏面開發代碼,而後合併到dev分支
mark
dev分支合併bob分支的命令是:
git checkout dev //先切換到dev分支,而後
git merge bobbash

##github上面建立分支:
[root@Dasoncheng learning]# git branch 
* master
[root@Dasoncheng learning]# git branch aming
[root@Dasoncheng learning]# git branch 
  aming
* master
[root@Dasoncheng learning]# git checkout aming 
Switched to branch 'aming'
[root@Dasoncheng learning]# git push origin aming 
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:chengzhenge/learning.git
 * [new branch]      aming -> aming
[root@Dasoncheng learning]#   
##在aming分支上面建立文件aming.txt推送以後,切換到master查看是否有aming 文件!
[root@Dasoncheng learning]# ll
total 12
-rw-r--r-- 1 root root  7 Nov  7 19:27 1.txt
-rw-r--r-- 1 root root  6 Nov  7 19:28 2.txt
-rw-r--r-- 1 root root 11 Nov  7 19:27 README.md
[root@Dasoncheng learning]# echo 'aming' >aming.txt
[root@Dasoncheng learning]# git add aming.txt
[root@Dasoncheng learning]# git commit -m "add aming.txt"
[root@Dasoncheng learning]# git push
[root@Dasoncheng learning]# git checkout master 
Switched to branch 'master'
[root@Dasoncheng learning]# ll
total 12
-rw-r--r-- 1 root root  7 Nov  7 19:27 1.txt
-rw-r--r-- 1 root root  6 Nov  7 19:28 2.txt
-rw-r--r-- 1 root root 11 Nov  7 19:27 README.md

22.10 遠程分支管理

本地新建的分支若是不推送到遠程,對其餘人就是不可見的
查看遠程分支 git ls-remote origin,能夠看到全部分支**(或者git branch -a 這個更快--這個好像是緩存)**
對於git push分支分兩種狀況
1.當本地分支和遠程分支一致時: **
git push會把全部本地分支的變動一同推送到遠程,若是想只推送一個分支,使用git push origin branch-name
** 2.當本地分支比遠程分支多時:

默認git push 只推送本地和遠程一致的分支,想要把多出來的本地分支推送到遠程時,使用git push origin branch-name 若是推送失敗,先用git pull抓取遠程的新提交
git clone的時候默認只把master分支克隆下來,若是想把全部分支都克隆下來,須要手動建立,在本地建立和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱要一致.net


[root@Dasoncheng learning]# git ls-remote origin  ##查看遠程全部分支;
b817f6a6359d8facd1842f784aa46126cc174227	HEAD
72afdb29b294a971c041a90c72edf8ca7edd0805	refs/heads/aming
b817f6a6359d8facd1842f784aa46126cc174227	refs/heads/dev
b817f6a6359d8facd1842f784aa46126cc174227	refs/heads/master
[root@Dasoncheng learning]# git branch -a  ##也能夠查看遠程全部分支;--這個好像是緩存
  dev
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/aming
  remotes/origin/dev
  remotes/origin/master
[root@Dasoncheng learning]# git branch
  aming
* master
[root@Dasoncheng learning]# git branch -d aming  
error: The branch 'aming' is not fully merged.
If you are sure you want to delete it, run 'git branch -D aming'.
[root@Dasoncheng learning]# git branch -D aming
Deleted branch aming (was 72afdb2).
[root@Dasoncheng learning]# git branch --help
[root@Dasoncheng learning]# git checkout dev
error: pathspec 'dev' did not match any file(s) known to git.
[root@Dasoncheng learning]# git checkout -b dev
Switched to a new branch 'dev'
[root@Dasoncheng learning]# git branch 
* dev
  master

一、當本地分支與遠程分支一致時(或者少於遠程分支)

[root@Dasoncheng learning]# git branch 
* dev
  master
[root@Dasoncheng learning]# ll
total 12
-rw-r--r-- 1 root root  7 Nov  7 19:27 1.txt
-rw-r--r-- 1 root root  6 Nov  7 19:28 2.txt
-rw-r--r-- 1 root root 11 Nov  7 19:27 README.md
[root@Dasoncheng learning]# echo aaa > a.txt
[root@Dasoncheng learning]# git add a.txt
[root@Dasoncheng learning]# git commit -m "add a.txt"
 create mode 100644 a.txt
[root@Dasoncheng learning]# git checkout master 
Switched to branch 'master'
[root@Dasoncheng learning]# echo bbb >b.txt
[root@Dasoncheng learning]# git add b.txt
[root@Dasoncheng learning]# git commit -m "add b.txt"
 create mode 100644 b.txt
[root@Dasoncheng learning]# git push  
##推送的時候,會將本地全部分支的改動推送到遠程;
##若是想只推送一個分支,使用git push origin branch-name
   b817f6a..787452d  dev -> dev
   b817f6a..310883c  master -> master

二、當本地分支比遠程分支多時:

[root@Dasoncheng learning]# git branch dev3  ##建立一個遠程沒有的分支dev3
[root@Dasoncheng learning]# git branch 
  dev
  dev3
* master
[root@Dasoncheng learning]# git checkout dev3 
Switched to branch 'dev3'
[root@Dasoncheng learning]# echo ccc >c.txt
[root@Dasoncheng learning]# git add c.txt
[root@Dasoncheng learning]# git commit -m "add c.txt"
 create mode 100644 c.txt
[root@Dasoncheng learning]# git push  
Everything up-to-date  
##推送 ,提示全部的事物都是最新的 沒有變更;咱們能夠這樣git push origin dev3
[root@Dasoncheng learning]# git push origin dev3
 * [new branch]      dev3 -> dev3  ##推送成功;
[root@Dasoncheng learning]#

提問:如何刪除遠程分支aming?
[root@Dasoncheng learning]# git branch -r -d origin/aming
Deleted remote branch origin/aming (was 72afdb2). ##此時,aming分支已經刪除
[root@Dasoncheng learning]# git branch -a
dev
*master
remotes/origin/HEAD -> origin/master
remotes/origin/dev
remotes/origin/master
[root@Dasoncheng learning]# git push origin :<aming>
-bash: syntax error near unexpected token `newline'
##推送一個本地空的分支到遠程 至關於刪除該分支;可是報錯了,我沒弄懂 上面的命令就能夠刪除aming分支了
##遠程看了一下,aming並無刪除 只是本地緩存刪了; 餓 個人天3d

22.11 標籤管理

  • 標籤相似於快照功能,能夠給版本庫打一個標籤,記錄某個時刻庫的狀態。也能夠隨時恢復到該狀態(實際用到的較少 但會)。
  • git checkout master 先切到master分支上
  • git tag v1.0 給master打一個標籤v1.0
  • git show v1.0 查看標籤信息
  • git tag 能夠查看全部的標籤
  • tag是針對commit來打標籤的,因此能夠針對歷史的commit來打tag
  • git log --pretty=oneline --abbrev-commit //先查看歷史的commit
  • git tag v0.9 46d3c1a //針對歷史commit打標籤
  • git tag -a v0.8 -m "tag just v1.1 and so on" 5aacaf4 //能夠對標籤進行描述
  • git tag -d v0.8 //刪除標籤
  • git push origin v1.0 //推送指定標籤到遠程
  • git push --tag origin //推送全部標籤
  • 若是本地刪除了一個標籤,遠程也想要刪除須要這樣操做:
  • git tag v1.0 -d //刪除本地標籤
  • git push origin :refs/tags/v1.0 //刪除遠程標籤
[root@Dasoncheng ~]# cd /home/learning/
[root@Dasoncheng learning]# git branch   ##通常都是針對master作tag
  aming2
  dev
  dev3
* master
[root@Dasoncheng learning]# git tag v1.0  ##對當前狀態打標籤v1.0
[root@Dasoncheng learning]# git tag  ##查看當前分支 標籤信息;
v1.0
[root@Dasoncheng learning]# git show v1.0   ##查看標籤詳細信息;
commit efd8425d07fac286a39cd029211cc9e700e62594
Merge: b4d5d65 b91cd87
Author: chengzhenge <gecz0000@163.com>
Date:   Mon Nov 13 19:33:43 2017 +0800

    Merge branch 'aming2'
    merge aming2
[root@Dasoncheng learning]# git log --pretty=oneline   ##顯示歷史commit;
efd8425d07fac286a39cd029211cc9e700e62594 Merge branch 'aming2' merge aming2
b91cd87fa3e04abadeb95809ee1485397418bb1a add aaa
69f094efff7cdb26d8db674764a43d370c7073b6 rm 1
b4d5d65c6f48a7d74315afa0b9abc2fcbe4620f8 Merge branch 'aming2'
ffb285ea75f46da68f77119711672f17ccf6bd67 add bb
24dd4c31d23c4aea9fa7882a87f713787f3f31ef add aa
……
[root@Dasoncheng learning]# git log --pretty=oneline --abbrev-commit   ##簡化顯示歷史commit
efd8425 Merge branch 'aming2' merge aming2
b91cd87 add aaa
69f094e rm 1
b4d5d65 Merge branch 'aming2'
ffb285e add bb
24dd4c3 add aa
……
[root@Dasoncheng learning]# git tag v0.9 ffb285e    ##針對歷史commit打標籤
[root@Dasoncheng learning]# git tag -a v0.8 -m "tag history commit" 24dd4c3  
##針對commit打標籤並 備註:
[root@Dasoncheng learning]# git push origin v1.0  ##推送指定標籤到遠程;
Counting objects: 7, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 536 bytes | 0 bytes/s, done.
Total 4 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
To git@github.com:chengzhenge/learning.git
 * [new tag]         v1.0 -> v1.0
[root@Dasoncheng learning]# git push --tags origin   ##推送全部標籤到遠程;
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:chengzhenge/learning.git
 * [new tag]         v0.8 -> v0.8
[root@Dasoncheng learning]# git tag
v0.8
v1.0
[root@Dasoncheng learning]# git show v0.8  ##tag history commit就是備註信息;
tag v0.8
Tagger: chengzhenge <gecz0000@163.com>
Date:   Tue Nov 14 16:00:00 2017 +0800

tag history commit

commit 24dd4c31d23c4aea9fa7882a87f713787f3f31ef
Author: chengzhenge <gecz0000@163.com>
Date:   Mon Nov 13 19:29:18 2017 +0800

    add aa

diff --git a/aa.txt b/aa.txt
new file mode 100644
index 0000000..8baef1b
--- /dev/null
+++ b/aa.txt
@@ -0,0 +1 @@
+abc
[root@Dasoncheng learning]# git tag v0.8 -d  ##若是本地刪除tag,遠程須要刪除須要作一下操做:
Deleted tag 'v0.8' (was 88b74f5)
[root@Dasoncheng learning]# git push origin :refs/tag/v0.8  ##其實就是本地刪除,而後同步到遠程,即刪除;
remote: warning: Deleting a non-existent ref.
To git@github.com:chengzhenge/learning.git
 - [deleted]         refs/tag/v0.8

22.12 git別名

  • git commit 這個命令是否是有點長? 用別名能夠提升咱們的工做效率
  • git config --global alias.ci commit
  • git config --global alias.co checkout
  • git config --global alias.br branch
  • 查看git別名使用命令
  • git config --list |grep alias
  • 查詢log小技巧:
  • git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
  • 取消別名
  • git config --global --unset alias.br
[root@Dasoncheng learning]# git config --global alias.ct commit   ##定義別名commit爲ct;
[root@Dasoncheng learning]# ls
2.txt  a  aaa.txt  aa.txt  aming2.txt  bb.txt  b.txt  README.md
[root@Dasoncheng learning]# echo aaa > 1a.txt
[root@Dasoncheng learning]# git add 1a.txt
[root@Dasoncheng learning]# git ct -m "add 1a.txt"
[master 8e7b931] add 1a.txt
 1 file changed, 1 insertion(+)
 create mode 100644 1a.txt
[root@Dasoncheng learning]# git config --global alias.br branch  ##定義別名branch爲br;
[root@Dasoncheng learning]# git br
  aming2
  dev
  dev3
* master
[root@Dasoncheng learning]# git config --list |grep alias  ##查看alias別名列表;
alias.ct=commit
alias.br=branch
[root@Dasoncheng learning]# git config --list  ##查看全部信息;
user.name=chengzhenge
user.email=gecz0000@163.com
alias.ct=commit
alias.br=branch
……
[root@Dasoncheng learning]# cat /root/.gitconfig   ##這裏也能夠編輯alias,不過建議命令編輯;
[user]
	name = chengzhenge
	email = gecz0000@163.com
[alias]
	ct = commit
	br = branch
[root@Dasoncheng learning]# git config --global --unset alias.br  ##取消別名;
[root@Dasoncheng learning]# git br
git: 'br' is not a git command. See 'git --help'.

Did you mean one of these?
	branch
	var
[root@Dasoncheng learning]# cat /root/.gitconfig   ##別名取消後,配置裏面也沒有了;
[user]
	name = chengzhenge
	email = gecz0000@163.com
[alias]
	ct = commit
##下面是git查詢log小技巧:彩色 有序顯示!
[root@Dasoncheng learning]# git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
[root@Dasoncheng learning]# git lg
* 8e7b931 - (HEAD, master) add 1a.txt (3 minutes ago) <chengzhenge>
*   efd8425 - (tag: v1.0) Merge branch 'aming2' merge aming2 (21 hours ago) <chengzhenge>
|\  
| * b91cd87 - (origin/aming2, aming2) add aaa (21 hours ago) <chengzhenge>
| * 69f094e - rm 1 (21 hours ago) <chengzhenge>
* |   b4d5d65 - Merge branch 'aming2' (21 hours ago) <chengzhenge>
|\ \  
| |/  
| * 24dd4c3 - add aa (21 hours ago) <chengzhenge>
* | ffb285e - (origin/master, origin/HEAD) add bb (21 hours ago) <chengzhenge>
* |   2b52bfb - test b.txt (21 hours ago) <chengzhenge>
……
相關文章
相關標籤/搜索