vim /etc/selinux/config # 修改 SELINUX 開機自啓動與否 setenforce 0 # 關閉 SELINUX getenforce # 查看 SELINUX 狀態 systemctl stop firewalld.service # 關閉防火牆 systemctl status firewalld.service # 查看防火牆狀態 systemctl enable firewalld.service # 設置防火牆開機不會自啓動 systemctl disable firewalld.service # 設置防火牆開機自啓動
# 區別1:網卡名稱的不一致 # 想讓 CentOS 7 中的網卡名也爲 eth 這種形式,可用以下方法: # 在安裝系統的時候,修改內核參數 net.ifnames=0 biosdevname=0,使網卡名統一 (即在安裝系統的時候,輸入 net.ifnames=0 biosdevname=0 ) # 區別2: CentOS 7 中的網絡配置命令: ip命令的安裝:yum -y install iproute # CentOS7主推使用ip、ss命令。 ifconfig命令的安裝: yum -y install net-tools # 網卡和路由的相關命令以下: ip a # 查看網卡信息 <--- ip addr 或者 ip address ip a s eth0 # 顯示某塊網卡的信息; a 是 addr 或者 address 的簡寫, s 是 show 的簡寫 ip r # 查看路由信息 <--- ip route # 7 中的 ss 命令可查看監聽的端口號和鏈接狀態,相似 6 中的 netstat [root@NEO ~]# ss -lntup # 查看端口 Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 128 *:22 *:* users:(("sshd",pid=7289,fd=3)) tcp LISTEN 0 100 127.0.0.1:25 *:* users:(("master",pid=7416,fd=13)) tcp LISTEN 0 128 :::22 :::* users:(("sshd",pid=7289,fd=4)) tcp LISTEN 0 100 ::1:25 :::* users:(("master",pid=7416,fd=14)) [root@NEO ~]# ss -ant # 查看鏈接狀態 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* ESTAB 0 0 10.0.0.201:22 10.0.0.253:6703 ESTAB 0 52 10.0.0.201:22 10.0.0.253:9113 LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* # setup 命令在 CentOS 7 中不建議使用;setup 在 7 中,一是建議使用 vim 去修改相關配置文件,二是可用 nmtui 命令去替代 setup 命令 # 區別3:主機名等配置文件 # 修改主機名 hostname 新的主機名 ---> 臨時生效 # 編輯 /etc/hostname ---> 修改主機名的配置文件 (修改主機名永久生效);方法一 hostnamectl set-hostname 新的主機名 ---> 讓修改主機名即臨時生效同時也永久生效(本質仍是改配置文件);方法二 # 修改字符集 localectl set-locale LANG=zh_CN. UTF-8 ---> 方法一 # 編輯 /etc/locale.conf ---> 方法二 cat /etc/redhat-release ---> 查看系統版本號 cat /etc/os-release ---> 全部支持systemd系統的統一發行版名稱和版本號文件 # 區別4: /etc/rc.local ---> 開機自啓動的軟件 # CentOS 7 中開機自啓動的軟件放到 /etc/rc.local 中,但 /etc/rc.local 的默認權限是 644,想要放在 /etc/rc.local 中的軟件可以開機自啓動,須要給 /etc/rc.local 加上執行權限 [root@neo ~]# ll /etc/rc.local lrwxrwxrwx. 1 root root 13 Jun 17 23:13 /etc/rc.local -> rc.d/rc.local [root@neo ~]# ll /etc/rc.d/rc.local -rw-r--r--. 1 root root 473 Oct 31 2018 /etc/rc.d/rc.local # 默認權限644 [root@neo ~]# chmod +x /etc/rc.local [root@neo ~]# ll /etc/rc.d/rc.local -rwxr-xr-x. 1 root root 473 Oct 31 2018 /etc/rc.d/rc.local # 加上執行權限 # 區別5: 運行級別 ---> Runlevel vs System Target # 7 中的運行級別 [root@neo ~]# ls -lh /usr/lib/systemd/system/runlevel*.target ---> 查看全部的運行級別(7中的7個運行級別是爲了兼容6中的7個運行級別) lrwxrwxrwx. 1 root root 15 Jun 17 23:13 /usr/lib/systemd/system/runlevel0.target -> poweroff.target lrwxrwxrwx. 1 root root 13 Jun 17 23:13 /usr/lib/systemd/system/runlevel1.target -> rescue.target lrwxrwxrwx. 1 root root 17 Jun 17 23:13 /usr/lib/systemd/system/runlevel2.target -> multi-user.target lrwxrwxrwx. 1 root root 17 Jun 17 23:13 /usr/lib/systemd/system/runlevel3.target -> multi-user.target lrwxrwxrwx. 1 root root 17 Jun 17 23:13 /usr/lib/systemd/system/runlevel4.target -> multi-user.target lrwxrwxrwx. 1 root root 16 Jun 17 23:13 /usr/lib/systemd/system/runlevel5.target -> graphical.target lrwxrwxrwx. 1 root root 13 Jun 17 23:13 /usr/lib/systemd/system/runlevel6.target -> reboot.target [root@neo ~]# systemctl get-default ---> 查看當前運行級別 multi-user.target [root@neo ~]# systemctl set-default multi-user.target ---> 設置運行級別爲 multi-user.target Removed symlink /etc/systemd/system/default.target. Created symlink from /etc/systemd/system/default.target to /usr/lib/systemd/system/multi-user.target. [root@neo ~]# [root@neo ~]# ll -d /etc/systemd/system/ /usr/lib/systemd/system/ drwxr-xr-x. 8 root root 4096 Jun 18 23:21 /etc/systemd/system/ # 這個目錄放的是系統的配置(相比下面的,優先級更高) drwxr-xr-x. 22 root root 12288 Jun 18 01:23 /usr/lib/systemd/system/ # 這個目錄放的是用戶的配置 # 區別6:管理服務 # CentOS 6 中: chkconfig service /etc/init.d/ # CentOS 7 中: # systemctl:融合service和chkconfig的功能於一體,兼容SysV和LSB的啓動腳本,並且夠在進程啓動過程當中更有效地引導加載服務 # 詳情見下圖 [root@neo ~]# systemctl is-active crond.service # 定時任務是否是正在運行 active [root@neo ~]# systemctl is-enabled crond.service # 定時任務是否是開機自啓動 enabled # systemctl start crond.service和systemctl start crond效果同樣。
systemctl 的用法:linux
給git添加全局配置ios
[root@web03 ~]# git config --global user.name neo # 添加全局配置 [root@web03 ~]# git config --global user.email andrewzheng@sina.cn # 添加全局配置 [root@web03 ~]# ll .gitconfig # --global 級別的配置會在用戶家目錄下生成一個 .gitconfig 文件 -rw-r--r-- 1 root root 48 Jul 8 16:27 .gitconfig [root@web03 ~]# cat .gitconfig [user] name = neo email = andrewzheng@sina.cn [root@web03 ~]# git config --list # 查看全局配置 user.name=neo user.email=andrewzheng@sina.cn [root@web03 ~]#
git 初始化倉庫git
[root@web03 ~]# mkdir git_test [root@web03 ~]# cd git_test/ [root@web03 git_test]# ll total 0 [root@web03 git_test]# git init # 初始化倉庫 Initialized empty Git repository in /root/git_test/.git/ [root@web03 git_test]# ll -a total 12 drwxr-xr-x 3 root root 4096 Jul 8 16:48 . dr-xr-x---. 5 root root 4096 Jul 8 16:47 .. drwxr-xr-x 7 root root 4096 Jul 8 16:48 .git # 生成的 git 倉庫(本地倉庫) [root@web03 git_test]# cd .git/ [root@web03 .git]# ll total 32 drwxr-xr-x 2 root root 4096 Jul 8 16:48 branches -rw-r--r-- 1 root root 92 Jul 8 16:48 config -rw-r--r-- 1 root root 73 Jul 8 16:48 description -rw-r--r-- 1 root root 23 Jul 8 16:48 HEAD drwxr-xr-x 2 root root 4096 Jul 8 16:48 hooks drwxr-xr-x 2 root root 4096 Jul 8 16:48 info drwxr-xr-x 4 root root 4096 Jul 8 16:48 objects # objects 目錄是真正的倉庫,倉庫的數據都是放到這個目錄下 drwxr-xr-x 4 root root 4096 Jul 8 16:48 refs [root@web03 .git]#
git 基礎命令web
[root@web03 git_test]# git status # 查看倉庫狀態 On branch master Initial commit nothing to commit (create/copy files and use "git add" to track) [root@web03 git_test]# touch a b [root@web03 git_test]# ll total 0 -rw-r--r-- 1 root root 0 Jul 9 00:46 a -rw-r--r-- 1 root root 0 Jul 9 00:46 b [root@web03 git_test]# git status On branch master Initial commit Untracked files: # 未跟蹤文件(只存在於工做目錄) (use "git add <file>..." to include in what will be committed) a b nothing added to commit but untracked files present (use "git add" to track) [root@web03 git_test]# git add a # 把 a 文件添加到暫存區(git add 命令 是把文件從工做目錄提交到暫存區;從 untracked 狀態變成 staged 狀態) [root@web03 git_test]# git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: a Untracked files: # 未跟蹤文件 (use "git add <file>..." to include in what will be committed) b [root@web03 git_test]# ll .git/ total 36 drwxr-xr-x 2 root root 4096 Jul 8 16:48 branches -rw-r--r-- 1 root root 92 Jul 8 16:48 config -rw-r--r-- 1 root root 73 Jul 8 16:48 description -rw-r--r-- 1 root root 23 Jul 8 16:48 HEAD drwxr-xr-x 2 root root 4096 Jul 8 16:48 hooks -rw-r--r-- 1 root root 96 Jul 9 00:49 index # 暫存區的內容保存在這個 index 文件中 drwxr-xr-x 2 root root 4096 Jul 8 16:48 info drwxr-xr-x 5 root root 4096 Jul 9 00:49 objects drwxr-xr-x 4 root root 4096 Jul 8 16:48 refs [root@web03 git_test]# git add . [root@web03 git_test]# git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: a new file: b [root@web03 git_test]# git rm --cached b # 把 b 文件從暫存區移到工做目錄中(從 staged 狀態變成 untracked 狀態 ) rm 'b' [root@web03 git_test]# git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: a Untracked files: (use "git add <file>..." to include in what will be committed) b [root@web03 git_test]# git rm -f a # git rm -f 文件 ---> 把文件從暫存區和工做目錄中同時刪除 rm 'a' [root@web03 git_test]# git status On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) b nothing added to commit but untracked files present (use "git add" to track) [root@web03 git_test]# ll total 0 -rw-r--r-- 1 root root 0 Jul 9 00:46 b [root@web03 git_test]# git mv b b.txt # 同時對工做區和暫存區的文件進行重命名 [root@web03 git_test]# git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) renamed: b -> b.txt [root@web03 git_test]# # 查看文件修改內容 [root@web03 git_test]# echo "bbb" >>b.txt [root@web03 git_test]# git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: b.txt no changes added to commit (use "git add" and/or "git commit -a") [root@web03 git_test]# git diff b.txt # git diff b.txt ---> 相對於暫存區,本地工做目錄中的 b.txt 的內容有哪些變化 diff --git a/b.txt b/b.txt index e69de29..f761ec1 100644 --- a/b.txt +++ b/b.txt @@ -0,0 +1 @@ +bbb [root@web03 git_test]# git add . [root@web03 git_test]# git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) modified: b.txt [root@web03 git_test]# git diff b.txt [root@web03 git_test]# git diff --cached b.txt # 相比於本地倉庫,暫存區內容有哪些變化 diff --git a/b.txt b/b.txt index e69de29..f761ec1 100644 --- a/b.txt +++ b/b.txt @@ -0,0 +1 @@ +bbb [root@web03 git_test]# git commit -m "modify b" [master 6f77fa9] modify b 1 file changed, 1 insertion(+) [root@web03 git_test]# git diff --cached b.txt [root@web03 git_test]# # 查看全部的 提交 [root@web03 git_test]# git log # 查看全部的 commit commit 6f77fa90ca72ad8d8d49edb708860e82d53e44ba Author: neo <andrewzheng@sina.cn> Date: Tue Jul 9 10:44:02 2019 +0800 modify b commit dc597ee6acf95b49e15feeae6a7815ab4b0b6a17 Author: neo <andrewzheng@sina.cn> Date: Tue Jul 9 10:20:45 2019 +0800 rename from b to b.txt commit 69e60bfb3dbd89e411c52d0e7f651f393a3f6aff Author: neo <andrewzheng@sina.cn> Date: Tue Jul 9 09:24:25 2019 +0800 commit b [root@web03 git_test]# git log --oneline # 查看全部 commit 的簡寫 6f77fa9 modify b dc597ee rename from b to b.txt 69e60bf commit b [root@web03 git_test]# git log --oneline --decorate # 查看各個分支當前所指的提交對象(commit object) 6f77fa9 (HEAD -> master) modify b dc597ee rename from b to b.txt 69e60bf commit b [root@web03 git_test]# git log -p # 顯示每次提交的完整信息(包括內容的變更) ... [root@web03 git_test]# git log -1 # 只顯示最近的1條提交記錄 (-2 就是最近的2條提交記錄) commit 6f77fa90ca72ad8d8d49edb708860e82d53e44ba Author: neo <andrewzheng@sina.cn> Date: Tue Jul 9 10:44:02 2019 +0800 modify b [root@web03 git_test]# # 用暫存區覆蓋工做目錄中的文件內容 [root@web03 git_test]# git status On branch master nothing to commit, working tree clean [root@web03 git_test]# cat b.txt bbb [root@web03 git_test]# echo "aaa" >>b.txt # 修改工做區內容 [root@web03 git_test]# git diff b.txt diff --git a/b.txt b/b.txt index f761ec1..b47d0c0 100644 --- a/b.txt +++ b/b.txt @@ -1 +1,2 @@ bbb +aaa [root@web03 git_test]# git status On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) # 該命令可撤回工做區內容的變化 modified: b.txt no changes added to commit (use "git add" and/or "git commit -a") [root@web03 git_test]# git checkout -- b.txt # 撤回工做區 b.txt 內容的變化 [root@web03 git_test]# git status On branch master nothing to commit, working tree clean [root@web03 git_test]# cat b.txt bbb [root@web03 git_test]# # 本地倉庫 覆蓋 暫存區內容 [root@web03 git_test]# git status On branch master nothing to commit, working tree clean [root@web03 git_test]# echo "aaa">>b.txt [root@web03 git_test]# git add . [root@web03 git_test]# git diff --cached # 相對於本地倉庫,緩存區有哪些變化 diff --git a/b.txt b/b.txt index f761ec1..b47d0c0 100644 --- a/b.txt +++ b/b.txt @@ -1 +1,2 @@ bbb +aaa [root@web03 git_test]# git status On branch master Changes to be committed: (use "git reset HEAD <file>..." to unstage) # 用本地倉庫的內容去覆蓋緩存區 modified: b.txt [root@web03 git_test]# git reset HEAD b.txt # 用本地倉庫的內容去覆蓋緩存區 Unstaged changes after reset: M b.txt [root@web03 git_test]# cat b.txt bbb aaa [root@web03 git_test]# git diff --cached b.txt # 相對於本地倉庫,緩存區沒有變化 [root@web03 git_test]# git diff b.txt # 相對於緩存區,工做區的內容有變化 diff --git a/b.txt b/b.txt index f761ec1..b47d0c0 100644 --- a/b.txt +++ b/b.txt @@ -1 +1,2 @@ bbb +aaa [root@web03 git_test]# # 回退到某一次 commit [root@web03 git_test]# cat b.txt bbb aaa [root@web03 git_test]# git log commit 6f77fa90ca72ad8d8d49edb708860e82d53e44ba Author: neo <andrewzheng@sina.cn> Date: Tue Jul 9 10:44:02 2019 +0800 modify b commit dc597ee6acf95b49e15feeae6a7815ab4b0b6a17 Author: neo <andrewzheng@sina.cn> Date: Tue Jul 9 10:20:45 2019 +0800 rename from b to b.txt commit 69e60bfb3dbd89e411c52d0e7f651f393a3f6aff Author: neo <andrewzheng@sina.cn> Date: Tue Jul 9 09:24:25 2019 +0800 commit b [root@web03 git_test]# git reset --hard 69e60bfb3dbd89e # 回退到某一次 commit (它以後的commit記錄在 git log 中會找不到) HEAD is now at 69e60bf commit b [root@web03 git_test]# cat b [root@web03 git_test]# git status On branch master nothing to commit, working tree clean [root@web03 git_test]# git log # 它以後的 commit 經過 git log 命令已經找不到了 commit 69e60bfb3dbd89e411c52d0e7f651f393a3f6aff Author: neo <andrewzheng@sina.cn> Date: Tue Jul 9 09:24:25 2019 +0800 commit b [root@web03 git_test]# git reflog # 顯示倉庫中全部的提交記錄 69e60bf HEAD@{0}: reset: moving to 69e60bfb3dbd89e 6f77fa9 HEAD@{1}: commit: modify b dc597ee HEAD@{2}: commit: rename from b to b.txt 69e60bf HEAD@{3}: commit (initial): commit b [root@web03 git_test]# git reset --hard dc597ee HEAD is now at dc597ee rename from b to b.txt [root@web03 git_test]# ll total 0 -rw-r--r-- 1 root root 0 Jul 10 01:06 b.txt [root@web03 git_test]# cat b.txt [root@web03 git_test]# # git log 會列出當前 commit 以前的全部提交記錄; git reflog會列出本地倉庫全部的歷史提交記錄
git 分支vim
# git分支的概念: Git的分支,從本質上來說僅僅是指向提交對象的可變指針(至關於作了一次快照)。在這一點上Git和SVN有着本質區別。SVN的分支實際上就是一個目錄; Git的默認分支名字是 master。在屢次提交操做後,你其實已經有一個指向最後那個提交對象的 master 分支。它會在每次的提交操做中自動向前移動 在實際開發項目中,儘可能保證 master 分支穩定,公用於發佈新版本,平時不要隨便直接修改裏面的數據文件; 平常開發都在 dev 分支上。每一個人從dev分支 建立本身的我的分支,開發完合併到dev分支,最後dev分支合併到master分支。
示例以下:緩存
[root@web03 git_test]# git log --oneline --decorate dc597ee (HEAD -> master) rename from b to b.txt # HEAD 可理解成 當前分支;HEAD在哪一個分支上,哪一個分支就是當前分支 69e60bf commit b [root@web03 git_test]# # 建立分支 [root@web03 git_test]# git branch testing # 建立分支的命令 [root@web03 git_test]# git branch # 查看全部分支 * master # * 表示當前所在分支 testing [root@web03 git_test]# git log --oneline --decorate dc597ee (HEAD -> master, testing) rename from b to b.txt # 此時 master分支和testing分支都指向了 dc597ee 此次 commit;此時 master 和 testing 這兩個分支裏面的內容是同樣的 69e60bf commit b [root@web03 git_test]# git checkout testing # git checkout 分支名 ---> 切換分支 Switched to branch 'testing' [root@web03 git_test]# git branch master * testing # 當前在 testing 分支上 [root@web03 git_test]# git log --oneline --decorate dc597ee (HEAD -> testing, master) rename from b to b.txt 69e60bf commit b [root@web03 git_test]# touch test # 在 testing 分支上建立一個test文件 [root@web03 git_test]# git status On branch testing Untracked files: (use "git add <file>..." to include in what will be committed) test nothing added to commit but untracked files present (use "git add" to track) [root@web03 git_test]# git add . [root@web03 git_test]# git commit -m "commit test on branch testing" # 此時提交到了 testing 分支上 [testing 0289b8e] commit test on branch testing 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test [root@web03 git_test]# git status On branch testing nothing to commit, working tree clean [root@web03 git_test]# ll # 在 testing 分支上查看目錄下的文件 total 0 -rw-r--r-- 1 root root 0 Jul 10 01:06 b.txt -rw-r--r-- 1 root root 0 Jul 11 01:46 test [root@web03 git_test]# git log --oneline --decorate 0289b8e (HEAD -> testing) commit test on branch testing # testing分支指向了 0289b8e 最新的一次commit;HEAD在 testing分支 dc597ee (master) rename from b to b.txt # master 仍然是指向 dc597ee 此次提交 69e60bf commit b [root@web03 git_test]# git checkout master # 切換到 master 分支上 Switched to branch 'master' [root@web03 git_test]# git branch * master testing [root@web03 git_test]# ll # 在 master 分支上查看該目錄下的文件:沒有剛纔建立的 test 文件 total 0 -rw-r--r-- 1 root root 0 Jul 10 01:06 b.txt # 分支合併 [root@web03 git_test]# git log --oneline --decorate dc597ee (HEAD -> master) rename from b to b.txt # 因爲 master 分支的最後一次commit是在 testing 分支的最後一次commit以前,因此在 master 分支上看不到 testing 分支 上的最後一次 commit 69e60bf commit b [root@web03 git_test]# git log --oneline --decorate 0289b8e (HEAD -> testing) commit test on branch testing # 在 testing 分支上能看到 master 分支上的最後一次 commit dc597ee (master) rename from b to b.txt 69e60bf commit b [root@web03 git_test]# git checkout master Switched to branch 'master' [root@web03 git_test]# touch master [root@web03 git_test]# git add . [root@web03 git_test]# git commit -m "commit master on branch master" # 在 master 分支上 commit 一個 master 新文件; 此時 master 分支 和 testing 分支會產生 分叉 [master 2edda3d] commit master on branch master 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 master [root@web03 git_test]# git log --oneline --decorate 2edda3d (HEAD -> master) commit master on branch master dc597ee rename from b to b.txt 69e60bf commit b [root@web03 git_test]# # 把 testing 分支合併到 master 分支上,首先要回到 master 分支上 [root@web03 git_test]# git branch * master # 當前在 master 分支上 testing [root@web03 git_test]# git merge testing # 把 testing 分支合併到 master 分支上 Merge branch 'testing' # Please enter a commit message to explain why this merge is necessary, # especially if it merges an updated upstream into a topic branch. # # Lines starting with '#' will be ignored, and an empty message aborts # the commit. merge testing branch to master branch # 寫 merger 時的 commit 信息 merge test file to master branch ~ ~ ~ ".git/MERGE_MSG" 9L, 321C written Merge made by the 'recursive' strategy. test | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 test [root@web03 git_test]# git branch * master testing [root@web03 git_test]# ll total 0 -rw-r--r-- 1 root root 0 Jul 10 01:06 b.txt -rw-r--r-- 1 root root 0 Jul 12 20:30 master -rw-r--r-- 1 root root 0 Jul 12 22:11 test # master分支上也多出了 test 文件 [root@web03 git_test]# git log --oneline --decorate d8d1b5e (HEAD -> master) Merge branch 'testing' # merger 的時候也會伴隨着 commit :把 master 和 testing 這兩個分支上的內容合併後作了一次 提交 2edda3d commit master on branch master 0289b8e (testing) commit test on branch testing dc597ee rename from b to b.txt 69e60bf commit b [root@web03 git_test]# git checkout testing # testing 分支上的內容沒有任何變化 Switched to branch 'testing' [root@web03 git_test]# ll total 0 -rw-r--r-- 1 root root 0 Jul 10 01:06 b.txt -rw-r--r-- 1 root root 0 Jul 12 22:11 test [root@web03 git_test]# git log --oneline --decorate 0289b8e (HEAD -> testing) commit test on branch testing dc597ee rename from b to b.txt 69e60bf commit b [root@web03 git_test]# # 因爲兩個分支上分別建立了一個 [不一樣的] 文件,因此上面的合併過程很順利,由於此時沒有 衝突 # 兩個分支對同一個文件(b.txt)作修改: [root@web03 git_test]# git branch * master # 當前在 master 分支上 testing [root@web03 git_test]# cat b.txt # 此時 b.txt 文件內容爲空 [root@web03 git_test]# git checkout master Switched to branch 'master' [root@web03 git_test]# echo "master" >> b.txt # 在 master 分支上,向 b.txt 文件中 追加 "master" [root@web03 git_test]# git add . [root@web03 git_test]# git commit -m "modify b.txt adding 'master' on master branch" # 提交 [master ef60afd] modify b.txt adding 'master' on master branch 1 file changed, 1 insertion(+) [root@web03 git_test]# git status On branch master nothing to commit, working tree clean [root@web03 git_test]# git log --oneline --decorate ef60afd (HEAD -> master) modify b.txt adding 'master' on master branch # 上面 commit 的提交記錄 d8d1b5e Merge branch 'testing' 2edda3d commit master on branch master 0289b8e (testing) commit test on branch testing dc597ee rename from b to b.txt 69e60bf commit b [root@web03 git_test]# git checkout testing # 切換到 testing 分支 Switched to branch 'testing' [root@web03 git_test]# git branch master * testing [root@web03 git_test]# cat b.txt # 此時 b.txt 的內容也是空 [root@web03 git_test]# echo "testing" >>b.txt # 在 testing 分支上,向 b.txt 中追加 "testing" [root@web03 git_test]# git add . [root@web03 git_test]# git commit -m "modify b.txt adding 'testing' on testing branch" [testing 8bd36ae] modify b.txt adding 'testing' on testing branch 1 file changed, 1 insertion(+) [root@web03 git_test]# git checkout master Switched to branch 'master' [root@web03 git_test]# git merge testing # 把 testing 分支合併到 master 分支上 Auto-merging b.txt CONFLICT (content): Merge conflict in b.txt # 合併時發生了衝突 Automatic merge failed; fix conflicts and then commit the result. [root@web03 git_test]# git status On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: b.txt # 兩個分支都修改了 b.txt 文件;在有衝突的狀況下,執行 merge 是不成功的;這種狀況下,必需要人工手動解決 衝突 no changes added to commit (use "git add" and/or "git commit -a") [root@web03 git_test]# cat b.txt # 查看此時 b.txt 文件內容以下 <<<<<<< HEAD # 當前分支(master)上的b.txt內容改動以下:(衝突的部分都會列出來) master ======= testing # testing 分支上的 b.txt 內容改動 >>>>>>> testing [root@web03 git_test]# vim b.txt # 手動解決衝突 ... [root@web03 git_test]# cat b.txt # 手動修改成以下: master testing [root@web03 git_test]# git status On branch master You have unmerged paths. (fix conflicts and run "git commit") (use "git merge --abort" to abort the merge) Unmerged paths: (use "git add <file>..." to mark resolution) both modified: b.txt no changes added to commit (use "git add" and/or "git commit -a") [root@web03 git_test]# git add . # 把修改後的文件提交 [root@web03 git_test]# git commit -m "merge testing to master both modify b.txt" # 把修改後的文件提交 [master f169ba5] merge testing to master both modify b.txt [root@web03 git_test]# git status On branch master nothing to commit, working tree clean [root@web03 git_test]# git log --oneline --decorate f169ba5 (HEAD -> master) merge testing to master both modify b.txt # 剛纔上面merge後作的 commit 8bd36ae (testing) modify b.txt adding 'testing' on testing branch # 在 testing 分支上作的 commit ef60afd modify b.txt adding 'master' on master branch # 在 master 分支上作的 commit d8d1b5e Merge branch 'testing' 2edda3d commit master on branch master 0289b8e commit test on branch testing dc597ee rename from b to b.txt 69e60bf commit b [root@web03 git_test]# git branch * master testing [root@web03 git_test]# git branch -d testing # 刪除 testing 分支;合併後 testing 分支沒用了,刪除掉 Deleted branch testing (was 8bd36ae). [root@web03 git_test]#
git 標籤網絡
git 的標籤 tag 也是指向某一次 commit 的不變指針 前面回滾使用的是一串字符串,又長又難記。 git tag v1.0 #→當前提交內容打一個標籤(方便快速回滾),每次提交均可以打個tag。 git tag #→查看當前全部的標籤 git show v1.0 #→查看當前1.0版本的詳細信息 git tag v1.2 -m "version 1.2 release is test" #→建立帶有說明的標籤,-a指定標籤名字,-m指定說明文字 git reset --hard v1.0 #->回到某一個版本(commit) git tag -d v1.0 #→咱們爲同一個提交版本設置了兩次標籤,刪除以前的v1.0
示例以下:ssh
[root@web03 git_test]# git log --oneline f169ba5 merge testing to master both modify b.txt 8bd36ae modify b.txt adding 'testing' on testing branch ef60afd modify b.txt adding 'master' on master branch d8d1b5e Merge branch 'testing' 2edda3d commit master on branch master 0289b8e commit test on branch testing dc597ee rename from b to b.txt 69e60bf commit b [root@web03 git_test]# git tag -a v1.0 -m "this is v1.0 version" # 沒有指定 commit 時就是給當前(最後一次)commit 打標籤 [root@web03 git_test]# git tag v1.0 [root@web03 git_test]# git tag -a v2.0 d8d1b5e -m "this is v2.0 version" # 針對某一次 commit 打標籤; d8d1b5e 是 commit ID [root@web03 git_test]# git tag v1.0 v2.0 [root@web03 git_test]# git show v1.0 # 查看某一次 commit 的詳細內容 tag v1.0 Tagger: neo <andrewzheng@sina.cn> Date: Fri Jul 19 02:00:49 2019 +0800 this is v1.0 version commit f169ba560b6d6908c74395e4b6d59ba14fc908d7 Merge: ef60afd 8bd36ae Author: neo <andrewzheng@sina.cn> Date: Fri Jul 12 23:30:28 2019 +0800 merge testing to master both modify b.txt diff --cc b.txt index 1f7391f,038d718..bde2aff --- a/b.txt +++ b/b.txt @@@ -1,1 -1,1 +1,2 @@@ +master + testing [root@web03 git_test]# git tag -d v2.0 # 刪除tag標籤 Deleted tag 'v2.0' (was a82593c) [root@web03 git_test]# git tag v1.0 [root@web03 git_test]#