初學GitHub 這篇博客也是複習記憶使用,有緣看到該博客的人請不吝指出錯誤。。。
Git是一個開源的分佈式版本控制系統,可以有效、高速地處理從很小到非常大的項目版本管理。
GitHub是一個面向開源及私有軟件項目的託管平臺,因爲只支持git 作爲唯一的版本庫格式進行託管,故名GitHub。
Git 安裝 由於Git是Linux的作者開發的,因此在Linux下安裝是十分方便的
如Ubuntu下 sudo apt-get install git-core
WIndow下安裝 可以找到一個安裝包 https://gitforwindows.org/就是一個普通的安裝包,和普通軟件一樣安裝即可。默認勾選,一直下一步即可。安裝完成後 git默認已經配置好了環境變量,可以直接使用git 命令
Git本地倉庫 包含工作區與版本區。版本去又 分爲 暫存區與倉庫區。
**Git 本地倉庫使用 **
首先可以配置自己身份 從開始菜單找到Git Bash 打開
git config --global user.name "用戶名"
git config --global user.email "郵箱"
配置完成可以查看配置是否生效
git config --global user.name
git config --global user.email
配置完成後開始真正使用
新建一個文件夾作爲 Git的實驗文件夾,如GitTest。進入該文件夾
可以通過鼠標右鍵點擊出現的工具欄選擇Git Bash Here 即可打開Git 命令行操作窗口。
初始化該文件夾 git init
可以看到該文件內多了一個隱藏文件夾 .git,隱藏文件顯示百度一下。這個文件夾用來記錄本地所有的Git操作。
新建一個文件
GitBash 查看狀態 git status
如果中文亂碼輸入git config --global core.quotepath false
可以看到未關聯文件 大俠.txt
提交代碼: 只要使用 add 與 commit 命令就可以了。
添加:
git add 大俠.txt
git status
使用add命令可將 指定文件添加到 暫存區 等待提交。 如果覺得一個一個添加太麻煩可使用
git add -A 或 git add .
提交:git commit -m "提交信息"
每次提交時一定要加上提交信息
git commit -m "First commit"
git status
提交後再次查看狀態可以看到沒有可提交的了。可查看記錄 git log
可以看到提交過一次,提交信息是 First commit
修改 大俠.txt 添加文字 查看git狀態使用git diff
可查看新增內容與版本庫中的區別
可使用 git diff 文件名
查看指定文件的區別。修改後可使用 add commit 再次提交到倉庫區。
如果修改後未進行 add 添加到暫存區時 發現修改有誤。決定撤回修改。可使用命令
git checkout -- 文件名
這是打開該文件會發現剛纔的修改已經失效了。
如果已經使用 add 命令添加進暫存區 這是直接使用 git checkout -- 大俠.txt
命令就沒有效果
此時 需要 git reset HEAD 文件名
後再執行 checkout
git reset HEAD 大俠.txt
重新修改後 再次提交。
查看提交記錄 git log
git log 不只包含提交記錄,還包括合併記錄等
如果記錄過多 只想查看其中一條 可以在命令中指定該記錄id
git log ce7440863f570a3aa4030a57d6f045c9f4a2435e -1
還可以查看該條記錄具體修改了什麼內容
git log ce7440863f570a3aa4030a57d6f045c9f4a2435e -1 -p
注 只用 id 前7 位即可查出不必寫全。。。
現在有兩條提交記錄 可進行 版本恢復 git reset --hard 版本號前7位
如恢復到未添加丁典狀態
git reset --hard 418dc5b
如此做 會使 版本會退到第一次提交後狀態。且 git log 命令也只能查出第一次提交記錄
可以git reflog查看之前版本 然後可使用git reset --hard 版本號
回到 當前版本
git reflog
git reset --hard 版本號
分支及分支合併
分支主要作用就睡在現有代碼基礎上開闢一個分叉口,使得代碼可以在主幹線和分支線上同時進行開發,且相互不會影響。
查看當前版本庫有哪些分支
git branch
毫無疑問當前只有一個 master 可理解爲主幹支
創建一個分支 如 version1.0 git branch version1.0
master 帶有 * 號 說明當前代碼在 master分支上。切換分支 git checkout 分支名
git checkout version1.0
可以在當前分支進行一些操作, 如修改 大俠.txt 文件 添加 喬峯
然後進行 add commit 操作
再次切換到master 分支後 在 version1.0分支上做的修改並沒有提交到 master版本我們可以打開文件看看剛纔的添加又沒有了 好神奇。。。
這時可以使用 merge命令來 完成 合併操作 git merge 分支名
即將分支名代表的分支合併到當前分支
git checkout master # 先切換到 master分支 已經切換過不用執行
git merge version1.0
分支合併後 即可將 version1.0做的修改 合併到 master中
刪除分支命令 git branch -D 分支名
git branch -D version1.0
與遠程版本庫協作
Git與GitHub關聯使用。到GitHub官網註冊並登錄。
本地生成 ssh key
ssh-keygen -t rsa -C "郵箱"
需要按三次回車 可以根據信息找到 ssh key位置。一般是 /c/Users/Administrator/.ssh/id_rsa.pub
或者輸入命令
clip <~/.ssh/id_rsa.pub
可直接複製該ssh key
打開 GitHub進入settings 找到SSH AND GPG keys 點擊 New SSH key
Title 隨便起一個 key 就將剛纔複製的粘貼上去
輸入完成 點擊 Add SSH key完成添加
測試連接是否成功
ssh -T [email protected]
登錄 GitHub 新建一個 倉庫 new repository 如果建好就跳過這一步 網速慢的我好急。。。
可以創建庫名 添加描述 選擇公開免費 或者 private私有 收費。public 就可以,可以選擇 勾選initlize… README會生成一個描述文件。 點擊 Create完成創建。
複製 倉庫地址 [email protected]:......
本地關聯GitHub git remote add origin 複製的地址
地址輸入錯誤 可以刪除 origin git romote rm origin
再重新關聯
上傳文件 git push origin master
#將本地代碼同步到遠程版本庫的master分支
如果創建庫時加入了README.md或者LICENSE那麼github會拒絕push。遠程版本庫中有本地版本庫中沒有的文件,需要先將遠程版本庫的內容拉取到本地,再從本地推送到遠程倉庫。
可以查看
從遠程版本庫上獲取最新代碼並且合併到本地 master 分支
git pull origin master
它相當於
git fetch origin master # 將遠程代碼庫同步到本地但不會合併到任何分支,而是存放到一個origin/master分支上。
git merge origin origin/master # 將origin/master分支上修改合併到主分支上
pull 相當於將fetch 和 merge 兩個命令放在一起執行了。
在fetch之後 merge之前可以查看遠程版本庫到底修改了什麼 git diff origin/master
git pull origin master
後可以再次執行提交操作 git push origin master
後便可看到遠程倉庫多了本地的文件
但理想總是美好的,但現實但總是有可能出現問題。。。
fatal: refusing to merge unrelated histories
查資料這個問題是因爲 兩個 根本不相干的 git 庫, 一個是本地庫, 一個是遠端庫, 然後本地要去推送到遠端, 遠端覺得這個本地庫跟自己不相干, 所以告知無法合併
解決方法 強制合併
git pull origin master --allow-unrelated-histories
輸入命令後拉取過程可能會進入一個編輯模式。會讓你輸入合併信息,輸入完成後 按下esc簡輸入
:wq即可保存退出 和Linux下 vi 很像。然後查看當前文件夾就可以發現多了個README.md。
接下來可以 推送到 遠程版本庫 git push origin master
GitHub上多了本地倉庫中內容
這樣就成功的建立了本地倉庫與遠程倉庫的關聯,每次想要push之前 記得要 先pull拉取遠程版本庫最新內容。
接下來我們嘗試Ubuntu下與遠程庫建立連接。
安裝git 設置用戶信息 生成ssh key 加入到GitHub。。。這些步驟都省略
方式一 : 本地文件都提交到本地倉庫後希望和遠程倉庫關聯
git remote add origin 遠程倉庫地址
git pull origin master
git push origin master
基本上就是這樣 但是有可能出現 本地倉庫版本 高於 遠程倉庫版本 的情況,這時合併應該會出現錯誤。和Windows下的錯誤差不多 也是 需要填寫一個 commit 信息。。。
中文好看懂。。。我們可以 寫一個 WindowsTest 的合併信息然後 ctrl+x退出。
這樣就可以拉取到本地了,然後我們可以將文件推送到遠程版本庫
git push origin master
可以成功 不過存在一個問題 我們的本地版本庫 仍然 高於 遠程版本庫 這就導致下一次拉去pull時仍然要設置提交信息 很麻煩。。。
解決辦法:這時遠程倉庫已經有我們本地版本庫的所有代碼了。所以我們可以使本地版本庫 版本回退到pull之前 使之 低於 遠程倉庫版本。 而後再次拉取遠程版本庫代碼。這樣 本地版本庫 版本就會 低於 遠程版本庫 也就不用每次遠程拉取代碼 就要輸入 提交信息了
git reset --hard 版本號前7位
git pull origin master
這樣 就只用第一次 拉取時輸入 提交信息了。
方式二: 將遠程版本庫clone 到 本地
git clone 遠程版本庫地址
如果 進入WIndowsTest文件夾就可以直接與遠程版本庫建立聯繫,或者希望在本文件夾中進行操作,可以將WIndowsTest文件夾中內容全部複製到本文件夾中。不要漏掉隱藏文件夾 .git複製完畢可以刪除WIndowsTest文件夾。
使用clone的話 不用再 執行
git remote add origin 遠程地址
git pull origin master
git push origin master
而且 提交新代碼時 可以直接成功。