<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                [https://www.cnblogs.com/lichihua/p/7767348.html](https://www.cnblogs.com/lichihua/p/7767348.html) ![](https://img.kancloud.cn/e2/d1/e2d19785f916c09d019b10291b09cd07_1078x311.png) ## **創建本地倉庫** git init【通過初始化創建新倉庫(**.git目錄**) 或者 git clone URL【通過克隆取到遠程倉庫的鏡像】 創建后,之后就無需再git init了或者git clone URL ``` git init ``` git clone 后 自動生成origin遠程倉庫別名無需git remote add啦 ``` //默認本地分支master 本地目錄名稱與Git 倉庫同名 git clone URL //拷貝一個指定遠程分支到本地,本地目錄名稱與此遠程倉庫同名 git clone?-b 分支名 URL //拷貝一個 Git 倉庫到本地,重新定義本地目錄名稱 git clone URL 本地目錄名 git clone?-b 分支名 URL 本地目錄名 ``` ## **為遠程github倉庫生成別名(clone的項目省略這步)** git remote add \<remote-alias-name\> \<url\> >[danger]注意:github上復制鏈接的時候一定要復制ssh的不要復制http鏈接,否則每次push都要你輸入用戶及密碼神煩! ``` //origin是默認的遠程倉庫別名(這個需要在git init與git clone 之才后能實現,方便push) git remote add origin git@github.com:yourName/yourRepo.git ``` ## **比較文件在進行提交** ``` //此命令比較的是工作目錄(Working tree)和暫存區域快照(index)之間的差異 //也就是修改之后還沒有暫存起來的變化內容 git diff //查看已經暫存起來的文件(staged)和上次提交時的快照之間(HEAD)的差異 git diff --cached git diff --staged // 顯示的是下一次commit時會提交到HEAD的內容(不帶-a情況下) //顯示工作版本(Working tree)和HEAD的差別 git diff HEAD //直接將兩個分支上最新的提交做diff git diff topic master 或 git diff topic..master //輸出自topic和master分別開發以來,master分支上的changed。 git diff topic...master //查看簡單的diff結果,可以加上--stat參數 git diff --stat //查看當前目錄和另外一個分支的差別 git diff test //顯示當前目錄和另一個叫'test'分支的差別 git diff HEAD -- ./lib //顯示當前目錄下的lib目錄和上次提交之間的差別(更準確的說是在當前分支下) //比較上次提交commit和上上次提交 git diff HEAD^ HEAD //比較兩個歷史版本之間的差異 git diff SHA1 SHA2 ``` ## **本地工作區文件增刪改** 多人協作時 還需要先要git pull拉取最新的遠程代碼在對代碼進行增刪改查,最后add、commit、push >[danger]**工作區**(本地源代碼文件增刪改查)? ?----**git add**---->? ?**暫存區**(.git目錄下" 下的index文件)? ---**git commit**--->? ? **本地倉庫**也叫版本庫(.git文件夾)? ? -----**git pull 遠程庫名 遠程分支名:本地分支名**---->更新遠程倉庫的代碼到本地倉庫-----**git push**---->? ? ? 同步到遠程倉庫 ?對于所有分支而言, 工作區和暫存區是公共的 ## **檢查當前項目中文件狀態** ``` git status ``` 目前它們的狀態可能是未更新(unmodified,查看文件狀態時默認是不顯示出來的),已修改(modified)或者已放入暫存區(staged)。未跟蹤文件(untracked)一般是新建的 **<span style="color:#ff6600">Untracked files:</span>** ? ? 表示以下文件還沒有被追蹤,一般是新建的文件: 看到這個我們必須要執行git add filename 和git commit -m "提交描述" **<span style="color:#ff6600">Changes not staged for commit:</span>** ? ? 這條狀態表示下面的文件都未存入暫存區,出現這個表示你需要git add 提示出現的文件 **<span style="color:#ff6600">Changes to be committed:</span>**這條狀態表示下面的文件都已存入**暫存區**(.git目錄下" 下的index文件)即已經git add過需要git commit -m啦,在提交到本地倉庫時會將這些變更提交到本地倉庫(.git)中 new file? ? ?新增了xxx文件 deleted? ? ?刪除了xxx文件 modified? ?已修改 **<span style="color:#ff6600">nothing to commit:</span>(無需任何操作了)** 工作區文件與本地庫一致沒有改動過和沒有新文件或者改動的全部提交到.git本地倉庫中 ## **將工作區文件提交到暫存區(跟蹤新文件)** ``` git add ./test.php ``` >[danger]只有經過`git add`放到暫存區的文件 執行`git commit`才會提交,所以用暫存區域將你的工作最少拆分為每個問題一個提交,并且為每一個提交附帶一個有用的信息。 如果其中一些改動修改了同一個文件,嘗試使用?`git add --patch`?來部分暫存文件,不要將問題堆在一起提交! 同時避免多次commit,即commit的一般是定下來的版本,有問題可以用check out將單個文件拿回來(改動一個文件 add一次,但是不要急著commit) >**git status** 提示Untracked files則有改動未git add 提交到暫存區 提示changes not staged for commit表示它下面的文件都未存入暫存區,出現這個表示你需要git add 提示出現的文件 撤銷提交到暫存區 ~~~ git reset HEAD <file> ~~~ ## **將暫存區的文件提交到本地倉庫**(也叫本地緩存) git diff --check 檢查空白字符 檢查修改的文件是否只改變了空白符 ``` git commit -m "提交說明" ``` >**git status** 提示Changes to be committed則表示所改動有文件都存入了暫存區,需要我們git commit 提交到本地倉庫 提示nothing to commit則表示工作區文件與本地庫一致,無需add和commit **撤銷git commit提交到本地倉庫的文件** ~~~ git checkout head 1.txt 2.txt #撤銷指定文件 git checkout head *.txt #撤銷所有txt文件 git checkout head . #撤銷所有 ~~~ >[danger]**恢復總結** >* 修改部分還未add的,用git checkout – filename 撤銷修改 >* 修改部分已經add了,用git reset HEAD filename 撤銷add,但保留修改,需配合git checkout – filename使用 >* 修改部分不但add了,還commit了.用git reset --hard HEAD^退回到上一版本 >* 退回到特定版本先git reflog查看特定commit節點的版本號(分支與HEAD都是指針,HEAD指向當前分支,分支指向提交),再git reset --hard 版本號即可將代碼退回到特定版本(commit指針指向哪個commit版本,代碼就變成哪個版本) >[danger]**刪除總結** 對于已commit的文件和代碼,rm filename可直接刪除文件,事后補個commit即可 >* 確定刪除,git commit >* 后悔刪除,git checkout – filename 撤銷修改,即撤銷刪除 ## **更新遠程倉庫代碼到本地** 默認:`git pull origin master` git pull \<short_name\> \<branch\>(相當于git fetch <short_name> <branch>[:local_branch]與git meger 推薦拆開的比較安全:) git pull <遠程主機名> <遠程分支名>:<本地分支名> ~~~ git fetch origin master:tmp //從遠程倉庫orgin(origin是別名) 獲取最新master遠程分支的代碼,在本地建立tmp分支并將該代碼存入該分支中 master可省略git fetch origin:tmp git diff tmp // 將當前分支和tmp進行對比 git merge tmp //合并tmp分支到當前默認的master分支 ~~~ 也可以用以下指令 ``` //將遠程倉庫的master分支下載到本地當前branch中 //這將更新git remote(列出已經存在的遠程分支) 中所有的遠程倉庫所包含分支的最新commit-id, 將其記錄到.git/FETCH_HEAD文件中 git fetch orgin master //比較本地的master分支和origin/master分支的差別 git log -p master ..origin/master //進行合并 git merge origin/master ``` 或者 ``` //取回遠程主機某個分支的更新,再與本地的指定分支合并。 git pull <遠程庫名> <遠程分支名>:<本地分支名> //取回遠程庫中的master分支,與本地的master分支進行合并更新,要寫成: git pull origin master:master //如果是要與本地當前分支合并更新,則冒號后面的<本地分支名>可以不寫 git pull origin master ``` 注意如果什么都沒修改只是更新本地文件與遠程文件一致,一般在剛開始準備寫代碼更新避免本地倉庫代碼與遠程差別太大 ``` //如果確定什么都沒有改過只是更新本地代碼 git pull ``` 以下表示要把issue1234分支合并入master分支,先切換到master,然后在合并 ``` git checkout master git merge issue1234 ``` ## **將本地倉庫代碼同步到遠程倉庫:** git push \<遠程主機名> \<本地分支名>:\<遠程分支名> 將本地master分支提交到遠程master分支(默認master所以可以省略) ``` git push?origin master //同git push?origin master:master git push?origin master:hz //將本地master分支提交到 ``` ``` //創建新的遠程分支,只需要新建并切換到本地分支,然后push時帶上要新建的分支名 這里遠程分支與本地分支同名(當然可以隨意起名) git push origin new_branch:new_branch //刪除遠程分支 git push origin --delete new_branch ``` >[danger]多人開發時,先pull代碼再 add commit push 如果在pull到push之間,你的同事又先一步push 你push時就會報錯,只能先pull下來在merge一下,根據沖突報錯手動解決沖突.最后再提交.如果此時又被人先push了,那真是悲劇中的悲劇,所以一般程序員們團隊開發時很少會有兩個人同時開發一個模塊的做法.簡直要打架 ### **準備工作:忽略提交** 由于性能原因,Git不會列出被排除的目錄 * 以`/`開頭表示.gitignore所在目錄下的文件或目錄 /bin * 以斜杠`/`結尾表示忽略目錄 bin/ * 如果在模式的開頭或中間(或兩者)都有/,則該模式是相對于特定`.gitignore`文件本身的目錄級別的。否則(bin/),模式也可能在該.gitignore文件本身的目錄級別以下的任何級別匹配。 /bin、/bin/*、bin/*、/bin/* * 如果模式末尾有/或者/*,則該模式將僅匹配目錄,否則該模式可以同時匹配文件和目錄。bin/ 例:doc/frotz/ 匹配doc/frotz目錄,但不匹配a/doc/frotz目錄 frotz/ 匹配 frotz 和 a/frotz * 以星號`*`通配多個字符; * 兩個連續的星號"\*\*",有著特殊的含義: 1.\*\*/,匹配所有目錄。如:\*\*/foo,匹配任意地方的foo文件或目錄。\*\*/foo/bar"匹配緊跟在任意位置的foo目錄下的bar文件或目錄. 2.末尾“/\*\*",匹配其內的任何東西。如"abc/\*\*",匹配abc目錄下的所有文件。 3./**/ ,匹配零個或多個目錄。如“a/\*\*/b",匹配"a/b" "a/c/b" "a/c/d/b" * 以問號`?`通配單個字符 * 以方括號`[]`包含單個字符的匹配列表; * 以嘆號`!`表示不忽略(跟蹤)匹配到的文件或目錄;如果排除了該文件的父目錄,則無法重新包含該文件 此外,git 對于 .ignore 配置文件是按行從上到下進行規則匹配的,意味著如果前面的規則匹配的范圍更大,則后面的規則將不會生效 ~~~ ! 來否定忽略,即比如在前面用了\*.apk,然后使用!a.apk,則這個a.apk不會被忽略。 # 1只忽略根目錄下名為bin的 【文件】 或【 目錄】 及此目錄下的所有內容,不忽略子目錄的bin文件及文件夾(如test/bin/3.txt) /bin # 2忽略根目錄及其子目錄下名為bin的【目錄】(及里面的內容),不忽略 bin 文件(忽略項目所有的bin目錄) bin/ # 3只忽略根目錄下名為bin的【目錄】(及里面的內容),不忽略 bin 文件及子目錄的bin文件夾及文件 bin/* # 同3 /bin/ # 同3 /bin/* #不要忽略根目錄下bin文件夾中.php文件 !/bin/*.php /*.log: 忽略 cat.log,不忽略 build/cat.log *.log: 忽略所有 .log 文件 debug/*.obj: 忽略 debug/io.obj,不忽略 debug/common/io.obj 和 tools/debug/io.obj **/foo: 忽略/foo, a/foo, a/b/foo等 a/**/b: 忽略a/b, a/x/b, a/x/y/b等 !/bin/run.sh: 不忽略 bin 目錄下的 run.sh 文件 config.php: 忽略當前路徑的 config.php 文件 debug?.logt # 忽略 debug?.log 文件或目錄,其中 ? 為任意一個字符 debug[0-9].log # 忽略 debug0.log、debug2.log 等,但不忽略 debuga.log 文件 debug[01].log # 僅忽略 debug0.log、debug1.log debug[!01].log # 不忽略 debug0.log、debug1.log doc/*.txt # 忽略 doc 目錄下一級的所有以 .txt 結尾的文件或目錄 doc/**/*.pdf # 忽略 doc 目錄下所有的 .pdf 文件或目錄 .gitignore規則不生效 .gitignore只能忽略那些Untracked files(沒有被跟蹤的文件--沒有add過的),如果某些文件已經被納入了版本管理中,則修改.gitignore是無效的。 解決方法就是先把本地緩存刪除(改變成未track狀態),然后再提交: git rm -r --cached . git add . git commit -m 'update .gitignore' ~~~ ## **其他命令:** 查看遠程倉庫 ~~~ git remote -v ~~~ ![](https://img.kancloud.cn/7d/a9/7da9a70ac190622fb6b269ff5d805776_409x35.png) 添加一個遠程倉庫 ``` git remote add url? ? ``` git rm -f 強制刪除出現問題的文件(記得備份哦,會將本地文件一起刪除掉)然后重新將這個文件add、commit、push一遍 創建一個新的分支提交改動在合并 ~~~ //1.先創建一個新的分支提交改動 $ git branch newbranch //2.查看分支 $ git branch //這時終端會輸出:,前面的*代表的是當前你所在的工作分支 newbranch *master //3.切換工作分支。 git checkout newbranch //創建并切換 相當于git branch newbranch 與 git checkout newbranch git checkout -b newbranch //4.然后將你的改動提交到新的分支上 $ git add 網頁換膚 $ git commit -m"skin" //此時可以$ git status 檢查下提交情況。如果提交成功,就回主分支 git checkout master //5.我們將新分支提交的改動合并到主分支上 $ git merge newbranch //合并分支可能產生沖突這是正常的,雖然我們這是新建的分支不會產生沖突,但還是在這里記錄下。可以用 $ git diff 來查看產生沖突的文件,然后做對應的修改再提交一次就可以了。 6.我們的問題解決了,接下來就可以push代碼了 $ git push -u origin master 7.最后,新建分支的朋友別忘了刪除分支 $ git branch -D newbranch 如果想保留分支只是想刪除已經合并的部分只要把大寫的D改成小寫的d就行了。 ~~~ 刪除與恢復分支 創建分支本質是修改HEAD的操作,只要HEAD被改了,reflog一定會變,刪除分支只是刪除了相關log里的HEAD記錄而已 ``` git branch -d branch_name 會刪除對應非當前分支 git branch -D branch_name 強制刪除當前在用分支 git reflog查看歷史HEAD,找到最后一次checkout切換到被刪分支的記錄,找到它的hash值或HEAD編號 git branch <branch_name> HEAD@{4} 成功恢復 ``` 清爽版log指令 git log --pretty=oneline 查看歷史版本與版本號(不受版本回退影響) git reflog **如何解決版本沖突** 對于test.txt文件 master分支添加了第四行000000 div分支與添加了第四行888888 此時master執行git merge div會發生conflict cat test.txt查看 >[info]<<<<之下表示當前分支的內容 =====隔開兩個分支的不同修改 \>>>>>之下表示被合并的分支的內容 有======的地方說明這兩分支都在同一地方做了修改,現在合并不了 **解決矛盾** 首先git log查看當前分支所有指針修改記錄 發現上一屆div分支合并的master的信息也還在,建議以后分支命名帶版本號,如div_01 規定不許再master分支上干活 快速合并會導致分支被刪后信息無法復原.git merge -no-ff -m “注釋” div采用禁止快合形式合并 處理bug分支 >思路 bug-->臨時分支 臨時分支-->修復 修復后-->A(合并到主分支) A-->刪除臨時分支 擱置當前工作分支 當前工作分支需要3天才能完成,才能提交.而issue-404 bug需要在5小時內完成.怎么辦? 確保當前分支是div,隱藏工作現場git stash 會將工作區+暫存區的內容保存起來 切換到master git checkout master 在master分支上創建新分支 git checkout -b issue404_bug 修復完后,切換到master分支,完成合并,刪除bug分支 重回div ; git checkout div git status發現工作區很干凈,需要手動恢復工作現場 git stash list查看,然后git stash apply恢復, 為防止不同的stash疊加干擾,每次恢復后必須手動刪除stash ; git stash drop git stash pop 一步從stash恢復工作現場并刪除stash里的記錄
                  <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>

                              哎呀哎呀视频在线观看