一猖腕。fork項(xiàng)目以及保持同步
1拆祈,首先f(wàn)ork 別人的一個(gè)項(xiàng)目:
2,在自己的賬戶(hù)下找到剛才的項(xiàng)目倘感,復(fù)制自己項(xiàng)目地址
3放坏,clone到本地:
4,如果項(xiàng)目有依賴(lài)包老玛,還要安裝依賴(lài)包淤年。一般 bower install 即可(有bower.json文件時(shí))。
5蜡豹,fork 之后保持同步(windows環(huán)境)
? ? (1)git remote -v? ;
這個(gè)命令用于查看所有遠(yuǎn)程庫(kù)(remote repo)的遠(yuǎn)程url, 如果只輸入git remote就是列出所有遠(yuǎn)程庫(kù)麸粮。
(2)發(fā)現(xiàn)沒(méi)有原作者的項(xiàng)目地址,git命令:?
git remote add upstream ?原作者項(xiàng)目url镜廉;
這個(gè)命令用于添加原作者remote repo(遠(yuǎn)程庫(kù)), 該操作只需操作一次即可 這個(gè)時(shí)候輸入git remote -v,會(huì)得到結(jié)果:
(3)可以用git status命令查看當(dāng)前改動(dòng)弄诲;
(4)保持同步:
git fetch('拿來(lái)、取來(lái)') upstream('上游娇唯、上行')?
git checkout('檢驗(yàn)齐遵、檢出') master
接下來(lái)就是合并這兩個(gè)分支寂玲,將原作者項(xiàng)目的修改同步到自己這里(注意還是指本地項(xiàng)目,不是自己Github空間里的項(xiàng)目)梗摇。
git merge upstream/master
本地同步完成后拓哟,同步到自己的github上:
git push origin(‘起源、原點(diǎn)’) master
至此, origin的master branch已經(jīng)于原作者項(xiàng)目同步了伶授。
保持同步的小結(jié):
保持同步可以用四個(gè)命令彰檬,按順序是:
git checkout master , ?git fetch upstream, git rebase, ?git push。
NOTE:
更新working branch(當(dāng)前工作的branch)
谎砾。之所以需要這么做, 是因?yàn)? 假設(shè)你開(kāi)發(fā)花了三天時(shí)間. 而三天之內(nèi)upstream上面更新過(guò). 然后, 如果你在這個(gè)時(shí)候提交PR, 理論上是不能merge的. Git會(huì)報(bào)錯(cuò), 因?yàn)樗l(fā)現(xiàn)你開(kāi)始工作的節(jié)點(diǎn)與upstream當(dāng)前的HEAD指針不同了.
逢倍。當(dāng)然, 如果這三天upstream上沒(méi)有任何更新, 你的PR就可以隨時(shí)merge, 因?yàn)槟愕拇a是基于未改動(dòng)的upstream master寫(xiě)的, 所以不會(huì)出現(xiàn)conflicts
。更新working branch, 相當(dāng)于: 把upstream master上的改動(dòng)應(yīng)用到當(dāng)前的working branch. 結(jié)果就是, 可以假裝你的working branch是基于改動(dòng)后的upstream master寫(xiě)的
景图。git checkout master, 然后git fetch upstream, 然后git merge 或git rebase
? ? ?..首先切換到master branch (origin的master branch)是獲取upstream上面所有的更新, 并獲取HEAD指針较雕。
? ? ?..理論上, git merge和git rebase 此時(shí) 都可以更新origin的master branch. 強(qiáng)烈推薦使用git rebase master. 原因見(jiàn)下文
。git checkout [workingBranch], 然后git merge master或git rebase master
? ? ?..這兩個(gè)命令都是把master branch(當(dāng)然, 是origin上的master branch)更新的內(nèi)容應(yīng)用到working branch上面.
? ? ?..區(qū)別在于, 使用git merge, 會(huì)讓你當(dāng)前在working branch上面已經(jīng)做的更改與upstream master的更改在timeline上出現(xiàn)分支. 而使用rebase, 會(huì)把你的更改加到upstream master更改的后面, 結(jié)果是整體時(shí)間軸呈線性的, 沒(méi)有分岔挚币。
? ? ?..也可以使用git rebase -i master來(lái)實(shí)現(xiàn)交互式rebase, 這一步驟一般是在提交PR之前做, 允許用戶(hù)squash commit (合并commit,把之前的幾次commit合為一個(gè))
? ? ?..如果自己當(dāng)前的branch有過(guò)改動(dòng)也沒(méi)關(guān)系, 在rebase的過(guò)程中, 會(huì)讓你處理conflicts, 處理好之后用git add [files]提交改動(dòng)后的特定文件或者用git add .提交全部文件,即可完成rebase
至此, origin上的working branch已經(jīng)與原作者沒(méi)有沖突, 可以隨時(shí)merge亮蒋。
關(guān)于push
。首先配置一下全局環(huán)境, git config --global push.default simple
妆毕。第一次push到some branch的時(shí)候用一次git push -u origin [someBranch] (效果等同于git push --set-upstream origin [someBranch]). 以后再要push到這個(gè)branch只需要git push就可以了, 前提是, 你在這個(gè)branch上.
關(guān)于branch
慎玖。本地刪除branch是git branch -d xxx.
? ? ? ?..如果有未提交的內(nèi)容, 想強(qiáng)行刪除branch, 就是git branch -D xxx. 謹(jǐn)慎使用, 這樣會(huì)讓你的未提交內(nèi)容丟失
。如果想在Github里刪除名為dev的branch, 命令是git push origin :dev
Commit
笛粘。git commit是把當(dāng)前的改動(dòng)放到Staging area(一個(gè)緩沖區(qū))
趁怔。記得使用git commit -m "[commitMessage]"
Commit Message的寫(xiě)法:
? ? ? ⌒角埃基本格式: 類(lèi)型: [主題]
? ? ? ?润努。類(lèi)型分為如下幾種:
feat: Feature的縮寫(xiě), 新的功能或特性
fix: bug的修復(fù)
docs: 文件修改, 比如修改應(yīng)用了ngDoc的項(xiàng)目的ngDoc內(nèi)容
style: 格式修改. 比如改變縮進(jìn), 空格, 刪除多余的空行, 補(bǔ)上漏掉的分號(hào). 總之, 就是不影響代碼含義和功能的修改
refractor: 代碼重構(gòu). 一些不算修復(fù)bug也沒(méi)有加入新功能的代碼修改
perf: Performance的縮寫(xiě), 提升代碼性能
test: 測(cè)試文件的修改
chore: 其他的小改動(dòng). 一般為僅僅一兩行的改動(dòng), 或者連續(xù)幾次提交的小改動(dòng)屬于這種
? ? ? ?。作用域:
這個(gè)參數(shù)用來(lái)描述這次改動(dòng)發(fā)生的位置.
比如更改了css文件, 就可以把"css"放在這里. 比如更改了JS文件, 可以把"js"放在這里
對(duì)于多個(gè)作用域, 可以用逗號(hào)分隔. 比如"html, png"
? ? ? ?示括。主題:
簡(jiǎn)略描述改動(dòng)了什么
用英文寫(xiě), 用現(xiàn)在時(shí), 不要用過(guò)去時(shí). 最開(kāi)頭不需要大寫(xiě)
中間可以有逗號(hào), 但結(jié)尾不要有句號(hào)
細(xì)節(jié)寫(xiě)在PR的詳細(xì)內(nèi)容里, 不需要寫(xiě)在這里
? ? ? ?铺浇。示例
改動(dòng)1: 在JS文件里修復(fù)了一個(gè)可能會(huì)使HTML不顯示結(jié)果的bug
git commit -m "fix(js) fix a bug that may cause rendering issue of HTML"改動(dòng)2: 在HTML里面加入了處理瀏覽器兼容性的代碼
git commit -m "feat(html) add code for browser compatibility"改動(dòng)3: 優(yōu)化了AngularJS名為mainSvc的Service異步發(fā)送HTTP request性能
git commit -m "perf($service) enhance async perf of mainSvc sending HTTP request"
Pull Request
標(biāo)題采用默認(rèn)設(shè)置即可. 默認(rèn)為commit (或squash之后commit) 的commit message。詳細(xì)內(nèi)容欄:
在第一行加上引號(hào)內(nèi)的內(nèi)容, "- [ ] LGTM". 別人review你的代碼之后就在這兒給你打個(gè)勾, lgtm是look good to me的縮寫(xiě).
Review別人代碼的時(shí)候, 如果覺(jué)得沒(méi)問(wèn)題, 打鉤之后在底下評(píng)論"LGTM"
支持Markdown和Emoji
查看別人的PR
review別人PR的時(shí)候, 建議下載到本地, 查看后再確定是否通過(guò)
項(xiàng)目路徑中找到.git/config, 在upstream底下加上: fetch = +refs/pull/*/head:refs/remotes/upstream/pr/*
配置好之后, git fetch upstream
在github上找到你想要review的PR的編號(hào), 如果是3, 就在本地, git checkout pr/3, 然后就可以看到改動(dòng)之后的代碼了
Log與Reflog
git log用來(lái)查詢(xún)r(jià)epo的版本變動(dòng)情況. 如果有需要的話, 可以通過(guò)commit ref來(lái)恢復(fù)
建議使用git log --oneline --decorate --graph作為查詢(xún)命令
git reflog用來(lái)查詢(xún)本地的操作歷史. 確切一點(diǎn)說(shuō), 是查詢(xún)HEAD的變化情況. 每一次HEAD變動(dòng), 都會(huì)記錄在reflog里
二垛膝。Creating Project Pages manually
原文:https://help.github.com/articles/creating-project-pages-manually/#make-a-fresh-clone
1鳍侣,Make a fresh clone
$ git clone github.com/user/repository.git ? ? (# clone our repository)
2,Create a gh-pages branch
$ cd repository
$ git checkout --orphan('孤兒‘) gh-pages?
(# Creates our branch, without any parents (it's an orphan!))
(Switched to a new branch 'gh-pages')$ git rm -rf . ?
(# Remove all files from the old working tree)
(rm '.gitignore' ?···)
3吼拥,Add content and push
Now you have an empty working directory. You can create some content in this branch and push it to GitHub. For example:
$ echo "My Page">index.html
$ git add index.html
$ git commit -a -m "First pages commit"
$ git push origin gh-pages
4倚聚,Load your new GitHub Pages site
After your push to thegh-pagesbranch, your Project Pages site will be available at 'http(s)://<username>.github.io/<projectname>' .
二(續(xù))Creating Pages with the automatic generator
https://help.github.com/articles/creating-pages-with-the-automatic-generator/
三。github提供的提示
1扔罪,create a new repository on the command line
echo "# git-testing" >> README.md
git initgit add README.md
git commit -m "first commit"
git remote add origin https://github.com/kingrychen/git-testing.git(示例)
git push -u origin master
2秉沼,push an existing repository from the command line
git remote add origin https://github.com/kingrychen/git-testing.gitgit
push -u origin master