git和github的簡單介紹

開始使用Git和GitHub

首先,訪問官方GitHub網(wǎng)站創(chuàng)建一個(gè)帳戶。其次,您必須在命令行上安裝Git。每個(gè)操作系統(tǒng)都應(yīng)附帶一個(gè)默認(rèn)命令行,但您可以查看此開發(fā)人員設(shè)置指南以了解我的設(shè)置。第三,我強(qiáng)烈建議為您的GitHub帳戶設(shè)置SSH。它是可選的,但可以保護(hù)您對(duì)GitHub的訪問權(quán)限。此外,它還省去了繁瑣的任務(wù),當(dāng)您將本地存儲(chǔ)庫的更改推送到GitHub上的遠(yuǎn)程存儲(chǔ)庫時(shí),您始終必須輸入憑據(jù)。

最后但并非最不重要的是,在GitHub上探索和社交。您可以通過訪問人員和組織的個(gè)人資料來探索不同的存儲(chǔ)庫。您可以觀看和加注存儲(chǔ)庫以獲取更新并顯示您的欽佩。您甚至可以開始作為開源貢獻(xiàn)者在存儲(chǔ)庫上做出貢獻(xiàn)。

為了社交,您可以關(guān)注在GitHub上開始有趣項(xiàng)目或討論的人。通過關(guān)注我的帳戶來嘗試獲得您的第一個(gè)社交關(guān)系。我很想看到你使用它。

如果您在使用GitHub時(shí)對(duì)Pull請(qǐng)求和問題的工作流程一無所知,請(qǐng)查看官方GitHub學(xué)習(xí)實(shí)驗(yàn)室。它應(yīng)該提供一切,讓你加快速度。這是開始使用GitHub的好方法。

使用Git和GitHub初始化存儲(chǔ)庫

一開始,你不得不初始化一個(gè)Git存儲(chǔ)庫。您可以使用git init本地計(jì)算機(jī)上項(xiàng)目文件夾中的命令初始化本地存儲(chǔ)庫。

本地存儲(chǔ)庫具有.git文件,其中保存有關(guān)存儲(chǔ)庫的所有信息(例如提交歷史記錄)??梢蕴砑恿硪粋€(gè)文件,即.gitignore文件,以忽略不應(yīng)添加到遠(yuǎn)程存儲(chǔ)庫的某些文件。忽略的文件僅在您的本地存儲(chǔ)庫中。

git init
touch .gitignore

例如,您可能希望忽略.env文件,其中存儲(chǔ)項(xiàng)目的合理環(huán)境變量或node_modules /文件夾,以便不將所有項(xiàng)目依賴項(xiàng)上載到遠(yuǎn)程GitHub存儲(chǔ)庫。

.env

node_modules/

git init本地項(xiàng)目中使用該命令后,可以在GitHub上創(chuàng)建存儲(chǔ)庫。在那里你可以給它一個(gè)名字,一個(gè)可選的描述和許可證(例如麻省理工學(xué)院)。不要使用復(fù)選框添加README.md。相反,請(qǐng)取消選中該復(fù)選框。然后,您將獲得在下一步中將本地存儲(chǔ)庫鏈接到遠(yuǎn)程存儲(chǔ)庫的說明。

此外,您可能希望在項(xiàng)目中添加README.md文件,然后將其顯示在GitHub上的存儲(chǔ)庫中?;旧?,這是初始化git項(xiàng)目,向其添加.gitignore文件,將其連接到GitHub上的遠(yuǎn)程存儲(chǔ)庫時(shí)需要知道的一切,添加添加,提交和推送序列的更改。您將在下一節(jié)中了解有關(guān)此序列的更多信息。

git github項(xiàng)目設(shè)置

否則,如果選中該復(fù)選框,您將有一個(gè)準(zhǔn)備就緒的遠(yuǎn)程存儲(chǔ)庫,您可以將其克隆到本地計(jì)算機(jī)以將其作為本地存儲(chǔ)庫。如果要擁有遠(yuǎn)程存儲(chǔ)庫的副本,可以使用git clone <repository_url>本地計(jì)算機(jī)克隆它。

在鏈接本地存儲(chǔ)庫并添加,提交并將初始項(xiàng)目推送到遠(yuǎn)程存儲(chǔ)庫(而不是在克隆它之后)之后,您可以開始調(diào)整項(xiàng)目(本地存儲(chǔ)庫)。之后,您始終遵循添加,提交和推送順序。在下一節(jié)中有關(guān)于此的更多信息。

推送您的更改

在過去幾年中,我注意到我使用的GitHub命令僅分解為我在重復(fù)出現(xiàn)的場景中使用的幾個(gè)基本命令。這些基本命令足以讓我在Web開發(fā)中出現(xiàn)。

擁有本地存儲(chǔ)庫后,您希望“提交”對(duì)代碼庫的更改。每個(gè)提交都保存為更改存儲(chǔ)庫的原子步驟。它保存在Git歷史記錄中,可以在命令行和GitHub上訪問。

提交附帶提交消息。稍后您將看到如何編寫提交消息。此外,會(huì)自動(dòng)生成散列以標(biāo)識(shí)您的提交。您不必在開始時(shí)關(guān)心哈希,但稍后它可以用于跳轉(zhuǎn)到歷史記錄中的特定點(diǎn)或相互比較提交。

提交發(fā)生在您的本地存儲(chǔ)庫中,然后最終將它們“推送”到遠(yuǎn)程存儲(chǔ)庫,在那里每個(gè)人都可以訪問它們。在通過推送將它們同步到遠(yuǎn)程存儲(chǔ)庫之前,您可以在本地累積多個(gè)提交。

您如何從本地存儲(chǔ)庫獲取更改到遠(yuǎn)程存儲(chǔ)庫?有三個(gè)基本命令:add,commit,push。

首先,您可以為下次提交添加全部或僅選定的已更改文件。

git add .
git add <path/to/file>

這些文件將從非暫存文件更改為暫存文件。您可以隨時(shí)驗(yàn)證它git status。文件暫存時(shí),可以提交它們。還有從暫存文件到非暫存文件的方法。

git reset HEAD <path/to/file>

其次,您可以使用提交消息附帶的提交提交暫存文件。該消息描述了您的更改。有兩種提交方式。您可以使用快捷方式commit命令內(nèi)聯(lián)添加提交消息:

git commit -m "<message>"

此外,您可以使用默認(rèn)的commit命令在之后使用多行生成更詳細(xì)的提交消息。

git commit

后一個(gè)命令將打開您的默認(rèn)命令行編輯器。通常,默認(rèn)的命令行編輯器是vim。在vim中,您可以鍵入提交消息。之后,您可以使用:wq哪個(gè)代表寫入和退出來保存并退出vim 。大多數(shù)情況下,您將使用快捷方式提交。它很快并且通常內(nèi)聯(lián)提交消息就足夠了。

現(xiàn)在,在進(jìn)入第三步之前,多個(gè)提交可以在本地存儲(chǔ)庫中累積。最后,在第三步中,您將把一個(gè)命令中的所有提交推送到遠(yuǎn)程存儲(chǔ)庫。

git push origin master

這些是從本地存儲(chǔ)庫到遠(yuǎn)程存儲(chǔ)庫進(jìn)行更改的三個(gè)必要步驟。但是當(dāng)您與其他人協(xié)作時(shí),在推送更改之前可能會(huì)有一個(gè)中間步驟。當(dāng)您在本地存儲(chǔ)庫中進(jìn)行更改時(shí),可能會(huì)發(fā)生其他人已在遠(yuǎn)程存儲(chǔ)庫中推送更改的情況。因此,在允許推送自己的更改之前,必須從遠(yuǎn)程存儲(chǔ)庫中提取所有更改。它可以很簡單:

git pull origin master

但是,我從不直接拉。相反,我拉動(dòng)rebase:

git pull --rebase origin master

拉動(dòng)和拉動(dòng)變形有什么區(qū)別?基本git pull只需將遠(yuǎn)程存儲(chǔ)庫中的所有更改放在更改之上。通過拉動(dòng)反轉(zhuǎn),它是另一種方式。首先是來自遠(yuǎn)程存儲(chǔ)庫的更改,然后您的更改將添加到頂部。從本質(zhì)上講,拉動(dòng)基數(shù)有兩個(gè)好處:

  • 它保留了有序的git歷史記錄,因?yàn)槟母氖冀K是最后添加的
  • 如果遇到?jīng)_突,它可以幫助您解決沖突,因?yàn)槟梢愿p松地調(diào)整自己的更改

如果從遠(yuǎn)程存儲(chǔ)庫中提取時(shí)已更改但未更改的文件,則會(huì)要求您先保存已更改的文件。在完成所有更改后,您可以再次應(yīng)用存儲(chǔ)。存儲(chǔ)將在本文后面解釋。

Git狀態(tài),日志和歷史記錄

有三個(gè)基本的git命令可以為您提供有關(guān)當(dāng)前和最近更改的項(xiàng)目狀態(tài)。它們不會(huì)更改本地存儲(chǔ)庫中的任何內(nèi)容,只會(huì)向您顯示信息。例如,每當(dāng)要檢查本地暫存和未暫存的更改時(shí),請(qǐng)鍵入:

git status

每當(dāng)您想要查看與最近提交相比的本地非暫停更改時(shí),請(qǐng)鍵入:

git diff

每當(dāng)您想要查看提交的git歷史記錄時(shí),請(qǐng)鍵入:

git log

默認(rèn)設(shè)置git log對(duì)大多數(shù)人沒有幫助。每次提交都占用太多空間,很難掃描歷史記錄。您可以使用以下配置來設(shè)置更簡潔的別名:

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"

現(xiàn)在你可以用git lg而不是git log。試試看看差異。

分枝

Git Branches用于多種用例。想象一下,您正在為您的項(xiàng)目開發(fā)一項(xiàng)新功能。您希望為其打開一個(gè)新分支,以獨(dú)立于整個(gè)項(xiàng)目跟蹤更改,更具體:獨(dú)立于主分支。在將分支合并到主分支之前,您(或其他人)可以查看更改。

另一個(gè)用例是您在開發(fā)人員團(tuán)隊(duì)中工作。您希望讓每個(gè)人都可以獨(dú)立完成改進(jìn),錯(cuò)誤修復(fù)和功能。因此,從主分支分支出這些用例是有意義的。Git分支的基本命令是什么?您可以自己創(chuàng)建一個(gè)新分支:

git checkout -b <branch>

或者檢查已經(jīng)存在的分支。

git checkout <branch>

當(dāng)分支由另一個(gè)協(xié)作者新創(chuàng)建并且您的本地存儲(chǔ)庫尚不知道時(shí),您可以從遠(yuǎn)程存儲(chǔ)庫中獲取所有分支信息。畢竟分支也是遠(yuǎn)程跟蹤的。之后,您可以簽出本地存儲(chǔ)庫中的分支。

git fetch
git checkout <branch>

進(jìn)入分支后,您可以從遠(yuǎn)程存儲(chǔ)庫中提取它的所有最新更改。

git pull --rebase origin <branch>

現(xiàn)在,您可以開始調(diào)整代碼git add .git commit它們,并最終推送您的更改。但是,不是將它們推送到主分支,而是將它們推送到分支機(jī)構(gòu)。

git push origin <branch>

這就是你如何為你的項(xiàng)目所謂的功能分支工作。其他開發(fā)人員可以在這些分支上進(jìn)行協(xié)作,最終將分支在Pull Request中合并到master分支。

合并拉取請(qǐng)求

在某些時(shí)候,您希望將分支合并到主分支。在合并之前,您將使用GitHub接口打開Pull Request(PR)。Pull Requests有助于激發(fā)討論和同行評(píng)審,以提高代碼質(zhì)量并在協(xié)作者之間分享知識(shí)。

在打開PR之前,我通常按照這些步驟檢查分支,獲取所有更新以將它們與我自己合并,從主分支獲取所有最近的更改,并強(qiáng)制將所有更改推送到分支本身。

首先,當(dāng)在主分支上時(shí),將主分支更新為最近的更改:

git pull --rebase origin master

二,結(jié)賬分行:

git checkout <branch>

如果您還沒有分支,請(qǐng)先從遠(yuǎn)程存儲(chǔ)庫中獲取所有分支,然后簽出分支:

git fetch
git checkout <branch>

第三,從分支中拉出最近的所有變化:

git pull --rebase origin <branch>

第四,從最近的主分支機(jī)構(gòu)本地改變所有變化:

git rebase master

最后但并非最不重要的是,強(qiáng)制將所有更改推送到遠(yuǎn)程分支:

git push -f origin <branch>

分支與來自所有協(xié)作者的更改,您的更改以及來自主分支的更改同步。最后,當(dāng)在遠(yuǎn)程存儲(chǔ)庫中更新分支時(shí),您可以點(diǎn)擊GitHub上的“Merge Pull Request”按鈕。

解決沖突

有時(shí),當(dāng)您從遠(yuǎn)程存儲(chǔ)庫中提取最近的更改或在分支上對(duì)主服務(wù)器進(jìn)行rebase時(shí),會(huì)遇到?jīng)_突。當(dāng)Git無法解析同一文件上的多個(gè)更改時(shí),就會(huì)發(fā)生沖突。在與多人合作時(shí),這種情況可能比預(yù)期的更頻繁。

例如,假設(shè)它發(fā)生git rebase master在您的分支上。命令行將指示它停止了rebase并向您顯示沖突的文件。這沒有理由恐慌。您可以打開指定的文件并解決沖突。在文件中,您應(yīng)該看到更改分開:來自master(HEAD)和分支(通常是提交消息)的更改。您必須決定要采用哪兩個(gè)版本才能解決沖突。解決所有文件中的所有沖突(通常所有文件都顯示在命令行上)后,您可以繼續(xù)使用rebase:

git add .
git rebase --continue

如果再次運(yùn)行沖突,則可以解決它們并再次運(yùn)行命令。

Git Stash

當(dāng)你想永久地或暫時(shí)地拋棄變化時(shí),通常會(huì)發(fā)生git藏匿。

git stash

后者,當(dāng)您只想暫存時(shí),可以在想要在其間執(zhí)行其他操作時(shí)使用。例如,修復(fù)錯(cuò)誤或代表某人創(chuàng)建PR。

藏匿處是一堆。您可以選擇最新的存儲(chǔ),將其再次應(yīng)用到本地存儲(chǔ)庫。

git stash apply

如果您不希望通過存儲(chǔ)“丟棄”所有更改,而只是選擇文件,則可以使用checkout命令:

git checkout -- <path/to/file>

該文件從未分級(jí)到完全沒有變化。但請(qǐng)記住,雖然存儲(chǔ)允許您從堆中獲取存儲(chǔ),但結(jié)帳會(huì)恢復(fù)文件中的所有更改。因此您無法檢索這些更改。

刪除分支

合并Pull Request后,通常需要?jiǎng)h除遠(yuǎn)程和本地分支。

git branch -d <branch>
git push origin :<branch>

當(dāng)?shù)谝粋€(gè)命令刪除本地計(jì)算機(jī)上的分支時(shí),第二個(gè)命令將刪除GitHub上的遠(yuǎn)程分支。在你之后清理總是好的,所以你應(yīng)該養(yǎng)成這個(gè)習(xí)慣。

交互式Rebase

我必須承認(rèn),它不是Git的必要命令,但我經(jīng)常使用它來組織我在一個(gè)分支上的提交。在我打開它作為其他人的公關(guān)之前,我喜歡有一個(gè)整潔的分支。整理分支意味著以有意義的順序提交提交,重寫提交消息或“壓縮”提交。壓縮提交意味著將多個(gè)提交合并為一個(gè)。

使用交互式rebase時(shí),您可以決定要以交互方式調(diào)整的提交數(shù)。

git rebase -i HEAD?<number>

之后,由于您調(diào)整了Git歷史記錄,因此您需要強(qiáng)制推送您的更改。強(qiáng)制推送將覆蓋遠(yuǎn)程存儲(chǔ)庫中的Git提交。

git push -f origin master

一般來說,你應(yīng)該小心推力。一個(gè)好的經(jīng)驗(yàn)法則是你可以在分支上執(zhí)行它們,但從不在主分支上執(zhí)行它們。在較大的項(xiàng)目中,強(qiáng)制推送通常在編程上不允許在主分支上。

提交消息約定

當(dāng)您與他人協(xié)作或希望自己提交整潔的提交消息時(shí),您可以遵循Git提交消息約定。有一些慣例。我習(xí)慣于遵循Angular社區(qū)提出的這些內(nèi)容:

  • 專長:一項(xiàng)新功能
  • 修復(fù):錯(cuò)誤修復(fù)
  • docs:文檔更改
  • style:代碼樣式更改,不會(huì)更改實(shí)現(xiàn)細(xì)節(jié)
  • 重構(gòu):代碼更改既不修復(fù)錯(cuò)誤也不添加功能
  • perf:改進(jìn)性能的代碼更改
  • 測試:測試代碼時(shí)
  • 家務(wù):對(duì)構(gòu)建過程或輔助工具和庫的更改

他們遵循以下語法: <type>(<scope>): <subject>

從命令行獲取的示例可以是:

git commit -m "feat(todo-list) add filter feature"

這就是你如何為自己和你的團(tuán)隊(duì)保持整潔的提交歷史。

Git Aliases

Git別名用于通過使用內(nèi)置的Git命令組成自己的Git命令。別名允許您使Git命令更簡潔或?qū)λ鼈冞M(jìn)行分組。例如,您可以將兩個(gè)Git命令分組,以便在一個(gè)命令中執(zhí)行它們。例如,如果你想刪除一個(gè)分支,這將是有意義的。本地和遠(yuǎn)程刪除將在一個(gè)命令中發(fā)生。像這樣:git nuke。在另一種情況下,你會(huì)縮寫git pull --rebasegpr

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,852評(píng)論 9 163
  • 安裝Git Git的下載地址:Git官網(wǎng)下載地址 Git本地倉庫和命令 配置用戶 下載完Git后,右鍵會(huì)有一個(gè)Gi...
    TokyoZ閱讀 4,631評(píng)論 1 7
  • Git 是目前最流行的分布式版本控制系統(tǒng)之一。 版本控制指的是,記錄每次版本變更的內(nèi)容和時(shí)間等細(xì)節(jié),保留各版本之間...
    神齊閱讀 1,507評(píng)論 0 7
  • 簡介 Git是一個(gè)開源的分布式版本控制系統(tǒng),用于敏捷高效地處理任何或小或大的項(xiàng)目。 Git 與常用的版本控制工具 ...
    閩越布衣閱讀 2,872評(píng)論 0 18
  • 元霄節(jié)的后一天,是鬧元霄的時(shí)間。我跟著媽媽去看。 一過去,就看到整整齊齊的,圓滾滾一排大鼓。那些戴著黃...
    少年樂子閱讀 314評(píng)論 0 0

友情鏈接更多精彩內(nèi)容