在 github 上 fork 一個 repo。基本上是開新的 branch,並以此為基礎送 pull request 給 upstream。
$ git clone git@github.com:azru0512/lbd.git $ cd lbd $ git remote add upstream https://github.com/Jonathan2251/lbd.git # 將分支 master 和 upstream 的分支 master 同步。 $ git branch --set-upstream upstream/master # git fetch upstream; git merge upstream/master 等同底下指令。 $ git pull upstream master # 建立並切換分支 $ git checkout -b format # 將分支 push 回 github 上的 (remote) origin $ git push origin format # 切換回 master $ git checkout master
# 更新 master (由他人的 repo fork 而出),自己的是 private。 $ git checkout private $ git log --graph --oneline --all | | * 2b87a72 Correct typing | | * 2224bae Correct typing | |/ |/| * | 1fd948f fix 80 characters of column width in funccall.rst # 挑選 master 某個 commit 合併。 $ git cherry-pick 2224bae # 處理需要合併的檔案。 $ git status # Unmerged paths: # (use "git add <file>..." to mark resolution) # # both modified: source/funccall.rst # $ git add source/funccall.rst $ git commit $ git push
$ git clone git@github.com:azru0512/lbd.git -b master $ cd lbd $ git config --global branch.master.remote https://github.com/Jonathan2251/lbd.git - 將另一個遠端分支 master 的內容拉下來,同步到自己的遠端 (origin) 分支 master。 # pull Jonathan2251/lbd.git $ git pull $ git push origin
$ git checkout private # 將 master 內容合併回 private 分支,將 "<<< ===" 或 "=== >>>" 其中之一消除掉。 $ git rebase master $ git status # Not currently on any branch. # 顯示尚未從 master merge 回 private 的第一個 commit。 $ git log -1 --pretty=oneline # 修改 conflict $ git mergetool # 手動修改 conflict 需要 add 處理完 conflict 的檔案。 $ git add source/install.rst $ git commit -am "Rebase master" # 查看 master 和 branch 合併情況。 $ git log --graph --oneline --all
$ git checkout -b private $ git checkout cmdline # 刪除 private 分支 $ git branch -D private $ git push origin --delete cmdline
$ vi source/funccall.rst # 檢查是否有多餘的空白 $ git diff --check
# 合併最近兩個 commit。 $ git rebase -i HEAD~2
$ mkdir en $ git mv Fig/ en/
# 修改最近一個 commit message。 $ git commit --amend -m "New commit message"
$ git reset HEAD^ # remove commit locally $ git push origin +HEAD # force-push the new HEAD commit
$ cd repo $ git checkout --orphan gh-pages $ git rm -rf . $ echo "First commit" > index.html # 如果有檔案或是目錄以底線開頭,加上以下檔案才能正確處理。 $ touch .nojekyll $ git add . $ git commit -m "Just to create the branch." $ git push origin gh-pages
$ git checkout master $ vi Makefile gh-pages: git checkout gh-pages rm -rf build _sources _static git checkout master $(GH_PAGES_SOURCES) git reset HEAD make html mv -fv build/html/* ./ rm -rf $(GH_PAGES_SOURCES) build git add -A git ci -m "Generated gh-pages for `git log master -1 --pretty=short --abbrev-commit`" && git push origin gh-pages ; git checkout master $ git add Makefile $ git commit -m "Update Makefile" $ git push
$ make gh-pages
$ git submodule add git@github.com:azru0512/lbd-example.git example $ git commit .gitmodules lbd-example -m "Add lbd-example submodule" $ git submodule init $ git submodule update