国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
Git 進(jìn)階指南

本文選自《開發(fā)者頭條》2 月 5 日最受歡迎文章 Top 3,作者 kaiye ,感謝 itfanr 分享。

歡迎分享http://toutiao.io/contribute


在掌握了基礎(chǔ)的 Git 使用 之后,可能會(huì)遇到一些問題。以下是貓哥篩選總結(jié)的部分常見問題,分享給各位朋友,掌握了這些問題的中的要點(diǎn)之后,git 進(jìn)階也就完成了,它包含以下部分:

  • 如何修改 origin 倉(cāng)庫(kù)信息

  • 如何配置 git ssh keys

  • 如何撤銷修改

  • 遇到?jīng)_突了怎么解決

  • git stash / alias / submodule 的使用問題等


問:如何修改 origin 倉(cāng)庫(kù)信息?

1、添加 origin 倉(cāng)庫(kù)信息

git remote add origin 

2、查看 origin 倉(cāng)庫(kù)信息

# 以下三種方式均可git config get --remote.origin.urlgit remote -vgit remote show origin

3、刪除 origin 倉(cāng)庫(kù)信息

git remote rm origin


問:如何配置 git ssh keys ?

  1. 在本地生成 ssh 私鑰 / 公鑰 文件

  2. 將「公鑰」添加到 git 服務(wù)(github、gitlab、coding.net 等)網(wǎng)站后臺(tái)

  3. 測(cè)試 git ssh 連接是否成功


接下來以添加 github ssh keys 為例,請(qǐng)注意替換 github 文件名。


注:如果對(duì)密鑰機(jī)制不熟悉,建議不要指定 -f 參數(shù),直接使用默認(rèn)的 id_rsa 文件名。

# 運(yùn)行以下命令,一直回車,文件名可隨意指定ssh-keygen -t rsa -b 4096 -C 'kaiye@macbook' -f ~/.ssh/github# 如果不是默認(rèn)密鑰 id_rsa ,則需要以下命令注冊(cè)密鑰文件,-K 參數(shù)將密鑰存入 Mac Keychainssh-add -K ~/.ssh/github# 將 pub 公鑰的內(nèi)容粘貼到線上網(wǎng)站的后臺(tái)cat ~/.ssh/github.pub# 測(cè)試 git ssh 是否連接成功ssh -T git@github.com


問:如何撤銷修改?

修改包含四種情況,需單獨(dú)區(qū)分。

1、新建的文件和目錄,且從未提交至版本庫(kù)

此類文件的狀態(tài)為 Untracked files ,撤銷方法如下:

git clean -fd .

其中,. 表示當(dāng)前目錄及所有子目錄中的文件,也可以直接指定對(duì)應(yīng)的文件路徑,以下其他情況類似。

2、提交過版本庫(kù),但未提交至?xí)捍鎱^(qū)的文件(未執(zhí)行 git add)

此類文件的狀態(tài)為 Changes not staged for commit,撤銷方法:

git checkout .

3、已提交至?xí)捍鎱^(qū)的文件

此類文件的狀態(tài)為 Changes to be committed,撤銷方法:

git reset .

執(zhí)行之后文件將會(huì)回到以上的 1 或者 2 狀態(tài),可繼續(xù)按以上步驟執(zhí)行撤銷,若 git reset 同時(shí)加上 --hard參數(shù),將會(huì)把修改過的文件也還原成版本庫(kù)中的版本。

4、已提交至版本庫(kù)(執(zhí)行了 git commit)

每次提交都會(huì)生成一個(gè) hash 版本號(hào),通過以下命令可查閱版本號(hào)并將其回滾:

git loggit reset <版本號(hào)>

如果需要「回滾至上一次提交」,可直接使用以下命令:

git reset head~1

執(zhí)行之后,再按照 1 或者 2 狀態(tài)進(jìn)行處理即可,如果回滾之后的代碼同時(shí)需要提交至 origin 倉(cāng)庫(kù)(即回滾 origin 線上倉(cāng)庫(kù)的代碼),需要使用 -f 強(qiáng)制提交參數(shù),且當(dāng)前用戶需要具備「強(qiáng)制提交的權(quán)限」。

5、如果回滾了之后又不想回滾了怎么辦?

如果是以上的情況 1 或者 2,只能歇屁了,因?yàn)樾薷臎]入過版本庫(kù),無法回滾。

如果是情況 4,回滾之后通過 git log 將看不到回滾之前的版本號(hào),但可通過 git reflog 命令(所有使用過的版本號(hào))找到回滾之前的版本號(hào),然后 git reset <版本號(hào)> 。


問:遇到?jīng)_突了怎么解決?

兩個(gè)分支進(jìn)行合并時(shí)(通常是 git pull 時(shí)),可能會(huì)遇到?jīng)_突,同時(shí)被修改的文件會(huì)進(jìn)入 Unmerged 狀態(tài),需要解決沖突。

1、最快的辦法

大部分時(shí)候,「最快解決沖突」的辦法是:使用當(dāng)前 HEAD 的版本(ours),或使用合并進(jìn)來的分支版本(theirs)。

# 使用當(dāng)前分支 HEAD 版本,通常是沖突源文件的 < 標(biāo)記部分,="======" 的上方git="" checkout="" --ours=""><文件名># 使用合并分支版本,通常是源沖突文件的 >>>>>>> 標(biāo)記部分git checkout --theirs <文件名># 標(biāo)記為解決狀態(tài)加入暫存區(qū)git add <文件名>

2、最通用的辦法

用編輯器打開沖突的源文件進(jìn)行修改,可能會(huì)發(fā)生遺留,且體驗(yàn)不好,通常需要借助 git mergetool 命令。

在 Mac 系統(tǒng)下,運(yùn)行 git mergetool <文件名> 可以開啟配置的第三方工具進(jìn)行 merge,默認(rèn)的是 FileMerge 應(yīng)用程序,還可以配置成 Meld 或 kdiff3,體驗(yàn)更佳。

3、最好的習(xí)慣

有三個(gè)好的習(xí)慣,可以減少代碼的沖突:

  • 在開始修改代碼前先 git pull 一下;

  • 將業(yè)務(wù)代碼進(jìn)行劃分,盡量不要多個(gè)人在同一時(shí)間段修改同一文件;

  • 通過 Gitflow 工作流 也可以提升 git 流程效率,減少發(fā)生沖突的可能性。

4、最復(fù)雜的情況

如果你的項(xiàng)目周期比較長(zhǎng),還應(yīng)該養(yǎng)成「定期 rebase 的習(xí)慣」,git pull --rebase 可以讓分支的代碼和 origin 倉(cāng)庫(kù)的代碼保持兼容,同時(shí)還不會(huì)破壞線上代碼的可靠性。

它的大概原理是,先將 origin 倉(cāng)庫(kù)的代碼按 origin 的時(shí)間流在本地分支中提交,再將本地分支的修改記錄追加到 origin 分支上。如果發(fā)生沖突,則可以即時(shí)的發(fā)現(xiàn)問題并解決,否則到項(xiàng)目上線時(shí)再解決沖突,可能會(huì)發(fā)生額外的風(fēng)險(xiǎn)。

rebase 大概的操作步驟如下:

# 將當(dāng)前分支的版本追加到從遠(yuǎn)程 pull 回來的節(jié)點(diǎn)之后git pull --rebase# 若發(fā)生沖突,則按以上其他方法進(jìn)行解決,解決后繼續(xù)git rebase --continue# 直到所有沖突得以解決,待項(xiàng)目最后上線前再執(zhí)行g(shù)it push origin# 若多次提交修改了同一文件,可能需要直接跳過后續(xù)提交,按提示操作即可git rebase --skip


問:如何在不提交修改的前提下,執(zhí)行 pull / merge 等操作?

有些修改沒有完全完成之前,可能不需要提交到版本庫(kù),圡方法是將修改的文件 copy 到 git 倉(cāng)庫(kù)之外的目錄臨時(shí)存放,pull / merge 操作完成之后,再 copy 回來。

這樣的做法一個(gè)是效率不高,另外一個(gè)可能會(huì)遺漏潛在的沖突。此類需求最好是通過 git stash 命令來完成,它可以將當(dāng)前工作狀態(tài)(WIP,work in progress)臨時(shí)存放在 stash 隊(duì)列中,待操作完成后再?gòu)?stash 隊(duì)列中重新應(yīng)用這些修改。

以下是 git stash 常用命令:

# 查看 stash 隊(duì)列中已暫存了多少 WIPgit stash list# 恢復(fù)上一次的 WIP 狀態(tài),并從隊(duì)列中移除git stash pop# 添加當(dāng)前 WIP,注意:未提交到版本庫(kù)的文件會(huì)自動(dòng)忽略,只要不運(yùn)行 git clean -fd . 就不會(huì)丟失git stash# 恢復(fù)指定編號(hào)的 WIP,同時(shí)從隊(duì)列中移除git stash pop stash@{num}# 恢復(fù)指定編號(hào)的 WIP,但不從隊(duì)列中移除git stash apply stash@{num}


問:如何在 git log 中查看修改的文件列表?

默認(rèn)的 git log 會(huì)顯示較全的信息,且不包含文件列表。使用 --name-status 可以看到修改的文件列表,使用 --oneline 可以將參數(shù)簡(jiǎn)化成一行。

git log --name-status --oneline

每次手動(dòng)加上參數(shù)很麻煩,可以通過自定義快捷命令的方式來簡(jiǎn)化操作:

git config --global alias.ls 'log --name-status --oneline --graph'

運(yùn)行以上配置后,可通過 git ls 命令來實(shí)現(xiàn)「自定義 git log」效果,通過該方法也可以創(chuàng)建 git st 、git ci 等一系列命令,以便沿用 svn 命令行習(xí)慣。

git config --global alias.st 'status --porcelain'

更多 git log 參數(shù),可通過 git help log 查看手冊(cè)。

如果是看上一次提交的版本日志,直接運(yùn)行 git show 即可。


問:git submodule update 時(shí)出錯(cuò)怎么解決?

例如,在執(zhí)行 git submodule update 時(shí)有以下錯(cuò)誤信息:

fatal: reference is not a tree: f869da471c5d8a185cd110bbe4842d6757b002f5Unable to checkout 'f869da471c5d8a185cd110bbe4842d6757b002f5' in submodule path 'source/i18n-php-server'

在此例中,發(fā)生以上錯(cuò)誤是因?yàn)?i18n-php-server 子倉(cāng)庫(kù)在某電腦 A 的「本地」commit 了新的版本 「f869da471c5d8a185cd110bbe4842d6757b002f5」,且該次 commit 未 push origin。但其父級(jí)倉(cāng)庫(kù) i18n-www 中引用了該子倉(cāng)庫(kù)的版本號(hào),且將引用記錄 push origin,導(dǎo)致其他客戶機(jī)無法 update 。

解決方法,在電腦 A 上將 i18n-php-server 版本庫(kù) push origin 后,在其他客戶機(jī)上執(zhí)行 git submodule update 。或者用以上提到的 git reset 方法,將子倉(cāng)庫(kù)的引用版本號(hào)還原成 origin 上存在的最新版本號(hào)。


其他問題

  • 設(shè)置本地分支與遠(yuǎn)程分支保持同步,在第一次 git push 的時(shí)候帶上 -u 參數(shù)即可

    git push origin master -u
  • 支持中文目錄與文件名的顯示(git 默認(rèn)將非 ASCII 編碼的目錄與文件名以八進(jìn)制編碼展示)

    git config core.quotepath off
  • 常用的打 tag 操作,更多請(qǐng)查看《Git 基礎(chǔ) - 打標(biāo)簽

    # 列出所有本地 taggit tag   # 本地新增一個(gè) tag,推送至 origin 服務(wù)器git tag -a v1.0.0 -m 'tag description'git push origin v1.0.0# 刪除本地與 origin taggit tag -d v1.0.0git push origin --delete v1.0.0
  • 使用 git GUI 客戶端(如,SoureTree、Github Desktop)能極大的提升分支管理效率。分支合并操作通常只有兩種情況:從 origin merge 到本地,使用 git pull 即可;從另外一個(gè)本地分支 merge 到當(dāng)前分支,使用 git merge <分支名>,以下是常用命令:

    # 新建分支 branch1,并切換過去git checkout -b branch1# 查看所有本地與遠(yuǎn)程分支git branch -a# 修改完成后,切換回 master 分支,將 branch1 分支合并進(jìn)來git checkout mastergit merge branch1# 刪除已完成合并的分支 branch1git branch -d branch1


如有其他問題,請(qǐng)?jiān)?nbsp;github 上留言補(bǔ)充 :)



更多優(yōu)質(zhì)內(nèi)容,歡迎安裝、使用《開發(fā)者頭條》iOS、Android 客戶端。

體驗(yàn)地址http://toutiao.io/download


本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
git命令總結(jié)
Git實(shí)戰(zhàn)
git常用命令大全
Windows下如何將一個(gè)文件夾通過Git上傳到GitHub上?
小豬用Git一年多后的總結(jié)精華
Windows下Git的使用
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服