
This is a test repo.【免費下載鏈接】OI-wiki:star2: Wiki of OI / ICPC for everyone. 某大型游戲線上攻略內含炫酷算術魔法項目地址: https://gitcode.com/GitHub_Trending/oi/OI-wikiThis repo includes some c codes.readme-refactor 分支下的自述文件 markdown # Code Library This repo includes some c codes.master分支下的自述文件# This is a code library. This repo includes some c codes.此時運行git merge readme-refactorGit 提示出現了合并沖突。執行git status可以查看是哪些文件引發了沖突$ 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: README.md no changes added to commit (use git add and/or git commit -a)如何解決沖突對于每個發生沖突的文件Git 都會在文件中加入標準的沖突解決標記。比如本例的README.md打開后它長這樣 HEAD # This is a code library. # Code Library readme-refactor This repo includes some c codes.作為分界線將兩個分支的內容隔開 HEAD標記和之間是 HEAD 指針master分支的內容和 readme-refactor之間是readme-refactor分支的內容。解決方法是通過編輯文本處理沖突刪除這些沖突標記保存文件將文件納入暫存區后提交$ git add README.md # 將發生沖突的文件納入暫存區 $ git commit [master fe92c6b] Merge branch readme-refactor into master其他合并方式Squash 與 Rebase默認情況下Git 采用Merge合并方式合并兩個分支將分支 B 并入分支 A 時會把 B 分支的所有 commit 并入 A 分支的提交歷史中。除此以外Git 還提供了兩種合并方式。Squash壓縮使用 Squash 方式將分支 B 并入分支 A 時B 分支上的所有更改會被合并為一次 commit 提交到 A 分支。在git merge中加入--squash參數即可使用 Squash 方式$ git merge branch --squash注意執行上述命令后Git 只會將 B 分支的所有更改存入 A 分支的暫存區緩沖區內接下來還需要執行一次git commit完成合并工作。使用 Squash 合并可以簡化 commit 記錄但會丟失具體到每一次 commit 的信息每次 commit 的提交者、每次 commit 的更改等只留下合并為一個整體的信息原每次 commit 的提交者會以 Co-authored-by 的形式在提交信息中列出。如果是在 GitHub 上進行 Squash and Merge原有的信息都可以在對應的 Pull Request 中查看。Rebase變基使用 Rebase 方式將分支 B 并入分支 A 時B 分支上的每一次 commit 都會單獨添加到 A 分支而不再像 Merge 方式那樣創建一個合并 commit。操作步驟首先切換到 B 分支將 B 分支變基到 A 分支$ git checkout B $ git rebase A然后切回 A 分支再執行一次git merge即可完成將 B 分支內容合并到 A 分支的工作$ git checkout A $ git merge B使用 Rebase 完成合并可以讓提交歷史線性化在適當場景下正確使用可以達到比 Merge 更好的效果。但這樣做會改變提交歷史在進行 Rebase 時和 Rebase 后再進行相關合并操作時都會增加出現沖突的可能操作不當反而會使提交歷史變得雜亂。因此如果對 Rebase 操作沒有充分了解不建議使用。管理遠程倉庫在本地完成更改后可能需要將這些更改推送到 GitHub 等 Git 倉庫托管平臺。托管在這些平臺上的倉庫歸屬于遠程倉庫的范疇——你可以從這些倉庫獲取信息也可以將更改推送上去。與其他人的協作離不開遠程倉庫。遠程倉庫的查看使用git remote可以查看當前倉庫的遠程倉庫列表。如果當前倉庫是克隆來的一般會有一個名為origin的遠程倉庫其鏈接就是克隆時使用的鏈接$ git remote origin查看某個遠程倉庫的詳細信息$ git remote show origin * remote origin Fetch URL: gitgithub.com:OI-wiki/OI-wiki.git Push URL: gitgithub.com:OI-wiki/OI-wiki.git HEAD branch: master Remote branches: git tracked master tracked ...遠程倉庫的配置git remote提供了一系列子命令來管理遠程倉庫命令作用git remote add name url添加一個名字為name、鏈接為url的遠程倉庫git remote rename oldname newname將名為oldname的遠程倉庫改名為newnamegit remote rm name刪除名為name的遠程倉庫git remote get-url name查看名為name的遠程倉庫的鏈接git remote set-url name newurl將名為name的遠程倉庫的鏈接更改為newurlOI Wiki 實踐根據 README.md 中的說明本倉庫在 GitHub 與 Gitee 兩個平臺均有鏡像克隆時可通過不同的遠程倉庫鏈接獲取源碼這正是git remote管理多遠程倉庫能力的典型應用場景。從遠程倉庫獲取更改遠程倉庫中其他人可能會推送一些更改執行git fetch可以將這些更改獲取到本地$ git fetch remote-name # 獲取 remote-name 的更改注意git fetch只會獲取遠程倉庫的更改而不會將這些更改合并到本地倉庫中。如果需要將這些更改合并可以使用git pull。在默認情況下git pull相當于git fetch后git merge FETCH_HEAD$ git pull remote-name branch # 獲取 remote-name 的更改然后將這些更改合并到 HEAD將更改推送到遠程倉庫使用git push將本地更改推送到遠程倉庫$ git push remote from:to # 將本地 from 分支的更改推送至 remote 的 to 分支根據遠程倉庫的要求可能會要求輸入遠程倉庫賬戶的用戶名和密碼。更改能成功推送需要滿足兩個條件你擁有向這個倉庫分支的寫入權限你的這個分支比遠程倉庫的相應分支新即沒有人在你進行更改的這段時間推送了新更改。當遠程分支有當前分支沒有的新更改時可以先執行git pull完成合并再推送。如果需要強制將本地分支的更改推送到遠程倉庫可以加入-f參數——但此時遠程倉庫的提交歷史會被本地的提交歷史覆蓋該命令應謹慎使用。更好的選擇是使用--force-with-lease參數該參數僅在遠程倉庫沒有更新時才會進行覆蓋。注意「更新」是相對于上一次 fetch 而言的如果使用了 VS Code 提供的 Auto Fetch 功能可能在沒有注意到更新的情況下使--force-with-lease和-f一樣危險。追蹤遠程分支通過將一個本地分支設定為追蹤遠程分支可以方便地查看本地分支與遠程分支的差別并簡化與遠程分支交互時的操作。步驟如下先執行git fetch remote-name將遠程倉庫的信息抓取到本地執行git switch remote-branch會在本地自動創建名字為remote-branch的新分支并設定該分支自動追蹤相應的遠程分支。注意只有當本地不存在該分支且恰好只有一個遠程分支的名字與該分支匹配時Git 才會自動創建該分支并設定其追蹤相應的遠程分支。此時執行git status會提示當前分支與遠程分支之間的差別。因為設定了追蹤關系推送命令也被簡化了——只需執行git push本地分支上的更改就能被推送至其追蹤的遠程分支。對于本地已有的分支也可以設定其對應的遠程追蹤分支在當前分支下執行git branch -u remote-name/remote-branch即可設定當前的本地分支追蹤該遠程分支。使用 ssh 連接與 HTTP(S) 相比使用 ssh 連接到遠程倉庫更為方便安全。使用 ssh 連接前需要先在本地添加 ssh 密鑰再將本地密鑰的公鑰上傳到遠程倉庫賬戶。GitHub Docs 提供了完整的「Connecting to GitHub with SSH」教程建議讀者按官方步驟操作。完成配置后即可通過 ssh 連接到遠程倉庫。下面是一條通過 ssh 連接 cloneOI Wiki倉庫的命令$ git clone gitgithub.com:OI-wiki/OI-wiki.git【免費下載鏈接】OI-wiki:star2: Wiki of OI / ICPC for everyone. 某大型游戲線上攻略內含炫酷算術魔法項目地址: https://gitcode.com/GitHub_Trending/oi/OI-wiki創作聲明:本文部分內容由AI輔助生成(AIGC),僅供參考