<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                概念:工作區:(git add filename)--> 暫存區:(git commit -m"note")--> 分支:(git push origin master )--> 遠程庫:origin 易恢復的。 ## Git 創建倉庫 本章節我們將為大家介紹如何創建一個 Git 倉庫。 你可以使用一個已經存在的目錄作為Git倉庫。 **git init** Git 使用 git init 命令來初始化一個 Git 倉庫,Git 的很多命令都需要在 Git 的倉庫中運行,所以 git init 是使用 Git 的第一個命令。 在執行完成 git init 命令后,Git 倉庫會生成一個 .git 目錄,該目錄包含了資源的所有元數據,其他的項目目錄保持不變(不像 SVN 會在每個子目錄生成 .svn 目錄,Git 只在倉庫的根目錄生成 .git 目錄)。 **使用方法** 使用當前目錄作為Git倉庫,我們只需使它初始化。 ```php git init ``` 該命令執行完后會在當前目錄生成一個 .git 目錄。 使用我們指定目錄作為Git倉庫。 ```php git init newrepo ``` 初始化后,會在 newrepo 目錄下會出現一個名為 .git 的目錄,所有 Git 需要的數據和資源都存放在這個目錄中。 如果當前目錄下有幾個文件想要納入版本控制,需要先用 git add 命令告訴 Git 開始對這些文件進行跟蹤,然后提交: ```php $ git add *.c $ git add README $ git commit -m '初始化項目版本' ``` 以上命令將目錄下以 .c 結尾及 README 文件提交到倉庫中。 **git clone** 我們使用 git clone 從現有 Git 倉庫中拷貝項目(類似 svn checkout)。 克隆倉庫的命令格式為: ```php git clone <repo> ``` 如果我們需要克隆到指定的目錄,可以使用以下命令格式: ```php git clone <repo> <directory> ``` 參數說明: - repo:Git 倉庫。 - directory:本地目錄。 比如,要克隆 Ruby 語言的 Git 代碼倉庫 Grit,可以用下面的命令: ```php $ git clone git://github.com/schacon/grit.git ``` 執行該命令后,會在當前目錄下創建一個名為grit的目錄,其中包含一個 .git 的目錄,用于保存下載下來的所有版本記錄。 如果要自己定義要新建的項目目錄名稱,可以在上面的命令末尾指定新的名字: ```php $ git clone git://github.com/schacon/grit.git mygrit ``` **配置** git 的設置使用 git config 命令。 顯示當前的 git 配置信息: ```php $ git config --list credential.helper=osxkeychain core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true core.ignorecase=true core.precomposeunicode=true ``` 編輯 git 配置文件: ```php $ git config -e # 針對當前倉庫 ``` 或者: ```php $ git config -e --global # 針對系統上所有倉庫 ``` 設置提交代碼時的用戶信息: ```php $ git config --global user.name "runoob" $ git config --global user.email test@runoob.com ``` 如果去掉 --global 參數只對當前倉庫有效。 ## Git 基本操作 一個簡單的操作步驟: ```php $ git init $ git add . $ git commit ``` - git init - 初始化倉庫。 - git add . - 添加文件到暫存區。 - git commit - 將暫存區內容添加到倉庫中。 創建倉庫命令 下表列出了 git 創建倉庫的命令: 命令 說明 git init 初始化倉庫 git clone 拷貝一份遠程倉庫,也就是下載一個項目。 提交與修改 Git 的工作就是創建和保存你的項目的快照及與之后的快照進行對比。 下表列出了有關創建與提交你的項目的快照的命令: |命令 |說明| |-|-| |git add |添加文件到倉庫| |git status| 查看倉庫當前的狀態,顯示有變更的文件。| |git diff |比較文件的不同,即暫存區和工作區的差異。| |git commit| 提交暫存區到本地倉庫。| |git reset| 回退版本。| |git reset| 回退版本。| |git rm |刪除工作區文件。| |git mv |移動或重命名工作區文件。| 提交日志 |命令 |說明| |-|-| |git log |查看歷史提交記錄| |git blame <file>| 以列表形式查看指定文件的歷史修改記錄 遠程操作 |命令 |說明| |-|-| |git remote |遠程倉庫操作| |git fetch |從遠程獲取代碼庫| |git pull |下載遠程代碼并合并| |git push |上傳遠程代碼并合并| ## Git 分支管理 幾乎每一種版本控制系統都以某種形式支持分支。使用分支意味著你可以從開發主線上分離開來,然后在不影響主線的同時繼續工作。 有人把 Git 的分支模型稱為必殺技特性,而正是因為它,將 Git 從版本控制系統家族里區分出來。 創建分支命令: ```php git branch (branchname) ``` 切換分支命令: ```php git checkout (branchname) ``` 當你切換分支的時候,Git 會用該分支的最后提交的快照替換你的工作目錄的內容, 所以多個分支不需要多個目錄。 合并分支命令: ```php git merge ``` 你可以多次合并到統一分支, 也可以選擇在合并之后直接刪除被并入的分支。 開始前我們先創建一個測試目錄: ```php $ mkdir gitdemo $ cd gitdemo/ $ git init Initialized empty Git repository... $ touch README $ git add README $ git commit -m '第一次版本提交' [master (root-commit) 3b58100] 第一次版本提交 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 README ``` **Git 分支管理** 列出分支 列出分支基本命令: ```php git branch ``` 沒有參數時,git branch 會列出你在本地的分支。 ```php $ git branch * master ``` 此例的意思就是,我們有一個叫做 master 的分支,并且該分支是當前分支。 當你執行 git init 的時候,默認情況下 Git 就會為你創建 master 分支。 如果我們要手動創建一個分支。執行 git branch (branchname) 即可。 ```php $ git branch testing $ git branch * master testing ``` 現在我們可以看到,有了一個新分支 testing。 當你以此方式在上次提交更新之后創建了新分支,如果后來又有更新提交, 然后又切換到了 testing 分支,Git 將還原你的工作目錄到你創建分支時候的樣子。 接下來我們將演示如何切換分支,我們用 git checkout (branch) 切換到我們要修改的分支。 ```php $ ls README $ echo 'runoob.com' > test.txt $ git add . $ git commit -m 'add test.txt' [master 3e92c19] add test.txt 1 file changed, 1 insertion(+) create mode 100644 test.txt $ ls README test.txt $ git checkout testing Switched to branch 'testing' $ ls README ``` 當我們切換到 testing 分支的時候,我們添加的新文件 test.txt 被移除了。切換回 master 分支的時候,它們有重新出現了。 ```php $ git checkout master Switched to branch 'master' $ ls README test.txt ``` 我們也可以使用 git checkout -b (branchname) 命令來創建新分支并立即切換到該分支下,從而在該分支中操作。 ```php $ git checkout -b newtest Switched to a new branch 'newtest' $ git rm test.txt rm 'test.txt' $ ls README $ touch runoob.php $ git add . $ git commit -am 'removed test.txt、add runoob.php' [newtest c1501a2] removed test.txt、add runoob.php 2 files changed, 1 deletion(-) create mode 100644 runoob.php delete mode 100644 test.txt $ ls README runoob.php $ git checkout master Switched to branch 'master' $ ls README test.txt ``` 如你所見,我們創建了一個分支,在該分支的上移除了一些文件 test.txt,并添加了 runoob.php 文件,然后切換回我們的主分支,刪除的 test.txt 文件又回來了,且新增加的 runoob.php 不存在主分支中。 使用分支將工作切分開來,從而讓我們能夠在不同開發環境中做事,并來回切換。 **刪除分支** 刪除分支命令: ```php git branch -d (branchname) ``` 例如我們要刪除 testing 分支: ```php $ git branch * master testing $ git branch -d testing Deleted branch testing (was 85fc7e7). $ git branch * master ``` **分支合并** 一旦某分支有了獨立內容,你終究會希望將它合并回到你的主分支。 你可以使用以下命令將任何分支合并到當前分支中去: ```php git merge ``` ```php $ git branch * master newtest $ ls README test.txt $ git merge newtest Updating 3e92c19..c1501a2 Fast-forward runoob.php | 0 test.txt | 1 - 2 files changed, 1 deletion(-) create mode 100644 runoob.php delete mode 100644 test.txt $ ls README runoob.php ``` 以上實例中我們將 newtest 分支合并到主分支去,test.txt 文件被刪除。 合并完后就可以刪除分支: ```php $ git branch -d newtest Deleted branch newtest (was c1501a2). ``` 刪除后, 就只剩下 master 分支了: ```php $ git branch * master ``` 合并沖突 合并并不僅僅是簡單的文件添加、移除的操作,Git 也會合并修改。 ```php $ git branch * master $ cat runoob.php ``` 首先,我們創建一個叫做 change_site 的分支,切換過去,我們將 runoob.php 內容改為: ```php <?php echo 'runoob'; ?> ``` 創建 change_site 分支: ```php $ git checkout -b change_site Switched to a new branch 'change_site' $ vim runoob.php $ head -3 runoob.php <?php echo 'runoob'; ?> $ git commit -am 'changed the runoob.php' [change_site 7774248] changed the runoob.php 1 file changed, 3 insertions(+) ``` 將修改的內容提交到 change_site 分支中。 現在,假如切換回 master 分支我們可以看內容恢復到我們修改前的(空文件,沒有代碼),我們再次修改 runoob.php 文件。 ```php $ git checkout master Switched to branch 'master' $ cat runoob.php $ vim runoob.php # 修改內容如下 $ cat runoob.php <?php echo 1; ?> $ git diff diff --git a/runoob.php b/runoob.php index e69de29..ac60739 100644 --- a/runoob.php +++ b/runoob.php @@ -0,0 +1,3 @@ +<?php +echo 1; +?> $ git commit -am '修改代碼' [master c68142b] 修改代碼 1 file changed, 3 insertions(+) ``` 現在這些改變已經記錄到我的 "master" 分支了。接下來我們將 "change_site" 分支合并過來。 ```php $ git merge change_site Auto-merging runoob.php CONFLICT (content): Merge conflict in runoob.php Automatic merge failed; fix conflicts and then commit the result. $ cat runoob.php # 代開文件,看到沖突內容 <?php <<<<<<< HEAD echo 1; ======= echo 'runoob'; >>>>>>> change_site ?> ``` 我們將前一個分支合并到 master 分支,一個合并沖突就出現了,接下來我們需要手動去修改它。 ```php $ vim runoob.php $ cat runoob.php <?php echo 1; echo 'runoob'; ?> $ git diff diff --cc runoob.php index ac60739,b63d7d7..0000000 --- a/runoob.php +++ b/runoob.php @@@ -1,3 -1,3 +1,4 @@@ <?php +echo 1; + echo 'runoob'; ?> ``` 在 Git 中,我們可以用 git add 要告訴 Git 文件沖突已經解決 ```php $ git status -s UU runoob.php $ git add runoob.php $ git status -s M runoob.php $ git commit [master 88afe0e] Merge branch 'change_site' ``` 現在我們成功解決了合并中的沖突,并提交了結果。 ## Git 查看提交歷史 Git 提交歷史一般常用兩個命令: - git log - 查看歷史提交記錄。 - git blame <file> - 以列表形式查看指定文件的歷史修改記錄。 **git log** 在使用 Git 提交了若干更新之后,又或者克隆了某個項目,想回顧下提交歷史,我們可以使用 git log 命令查看。 針對我們前一章節的操作,使用 git log 命令列出歷史提交記錄如下: ```php $ git log commit d5e9fc2c811e0ca2b2d28506ef7dc14171a207d9 (HEAD -> master) Merge: c68142b 7774248 Author: runoob <test@runoob.com> Date: Fri May 3 15:55:58 2019 +0800 Merge branch 'change_site' commit c68142b562c260c3071754623b08e2657b4c6d5b Author: runoob <test@runoob.com> Date: Fri May 3 15:52:12 2019 +0800 修改代碼 commit 777424832e714cf65d3be79b50a4717aea51ab69 (change_site) Author: runoob <test@runoob.com> Date: Fri May 3 15:49:26 2019 +0800 changed the runoob.php commit c1501a244676ff55e7cccac1ecac0e18cbf6cb00 Author: runoob <test@runoob.com> Date: Fri May 3 15:35:32 2019 +0800 ``` 我們可以用 --oneline 選項來查看歷史記錄的簡潔的版本。 ```php $ git log --oneline $ git log --oneline d5e9fc2 (HEAD -> master) Merge branch 'change_site' c68142b 修改代碼 7774248 (change_site) changed the runoob.php c1501a2 removed test.txt、add runoob.php 3e92c19 add test.txt 3b58100 第一次版本提交 ``` 這告訴我們的是,此項目的開發歷史。 我們還可以用 --graph 選項,查看歷史中什么時候出現了分支、合并。以下為相同的命令,開啟了拓撲圖選項: ```php * d5e9fc2 (HEAD -> master) Merge branch 'change_site' |\ | * 7774248 (change_site) changed the runoob.php * | c68142b 修改代碼 |/ * c1501a2 removed test.txt、add runoob.php * 3e92c19 add test.txt * 3b58100 第一次版本提交 ``` 現在我們可以更清楚明了地看到何時工作分叉、又何時歸并。 你也可以用 --reverse 參數來逆向顯示所有日志。 ```php $ git log --reverse --oneline 3b58100 第一次版本提交 3e92c19 add test.txt c1501a2 removed test.txt、add runoob.php 7774248 (change_site) changed the runoob.php c68142b 修改代碼 d5e9fc2 (HEAD -> master) Merge branch 'change_site' ``` 如果只想查找指定用戶的提交日志可以使用命令:git log --author , 例如,比方說我們要找 Git 源碼中 Linus 提交的部分: ```php $ git log --author=Linus --oneline -5 81b50f3 Move 'builtin-*' into a 'builtin/' subdirectory 3bb7256 make "index-pack" a built-in 377d027 make "git pack-redundant" a built-in b532581 make "git unpack-file" a built-in 112dd51 make "mktag" a built-in ``` 如果你要指定日期,可以執行幾個選項:--since 和 --before,但是你也可以用 --until 和 --after。 例如,如果我要看 Git 項目中三周前且在四月十八日之后的所有提交,我可以執行這個(我還用了 --no-merges 選項以隱藏合并提交): ```php $ git log --oneline --before={3.weeks.ago} --after={2010-04-18} --no-merges 5469e2d Git 1.7.1-rc2 d43427d Documentation/remote-helpers: Fix typos and improve language 272a36b Fixup: Second argument may be any arbitrary string b6c8d2d Documentation/remote-helpers: Add invocation section 5ce4f4e Documentation/urls: Rewrite to accomodate transport::address 00b84e9 Documentation/remote-helpers: Rewrite description 03aa87e Documentation: Describe other situations where -z affects git diff 77bc694 rebase-interactive: silence warning when no commits rewritten 636db2c t3301: add tests to use --format="%N" ``` 更多 git log 命令可查看:http://git-scm.com/docs/git-log **git blame** 如果要查看指定文件的修改記錄可以使用 git blame 命令,格式如下: ```php git blame <file> ``` git blame 命令是以列表形式顯示修改記錄,如下實例: ```php $ git blame README ^d2097aa (tianqixin 2020-08-25 14:59:25 +0800 1) # Runoob Git 測試 db9315b0 (runoob 2020-08-25 16:00:23 +0800 2) # 菜鳥教程 ``` ## Git 標簽 如果你達到一個重要的階段,并希望永遠記住那個特別的提交快照,你可以使用 git tag 給它打上標簽。 比如說,我們想為我們的 runoob 項目發布一個"1.0"版本。 我們可以用 git tag -a v1.0 命令給最新一次提交打上(HEAD)"v1.0"的標簽。 -a 選項意為"創建一個帶注解的標簽"。 不用 -a 選項也可以執行的,但它不會記錄這標簽是啥時候打的,誰打的,也不會讓你添加個標簽的注解。 我推薦一直創建帶注解的標簽。 ```php $ git tag -a v1.0 ``` 當你執行 git tag -a 命令時,Git 會打開你的編輯器,讓你寫一句標簽注解,就像你給提交寫注解一樣。 現在,注意當我們執行 git log --decorate 時,我們可以看到我們的標簽了: ```php * d5e9fc2 (HEAD -> master) Merge branch 'change_site' |\ | * 7774248 (change_site) changed the runoob.php * | c68142b 修改代碼 |/ * c1501a2 removed test.txt、add runoob.php * 3e92c19 add test.txt * 3b58100 第一次版本提交 ``` 如果我們忘了給某個提交打標簽,又將它發布了,我們可以給它追加標簽。 例如,假設我們發布了提交 85fc7e7(上面實例最后一行),但是那時候忘了給它打標簽。 我們現在也可以: ```php $ git tag -a v0.9 85fc7e7 $ git log --oneline --decorate --graph * d5e9fc2 (HEAD -> master) Merge branch 'change_site' |\ | * 7774248 (change_site) changed the runoob.php * | c68142b 修改代碼 |/ * c1501a2 removed test.txt、add runoob.php * 3e92c19 add test.txt * 3b58100 (tag: v0.9) 第一次版本提交 ``` 如果我們要查看所有標簽可以使用以下命令: ```php $ git tag v0.9 v1.0 ``` 指定標簽信息命令: ```php git tag -a <tagname> -m "runoob.com標簽" ``` PGP簽名標簽命令: ```php git tag -s <tagname> -m "runoob.com標簽" ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看