Git手冊

給自己看的GIT指南

給前看后忘不用就忘的自己寫的指南。不求完備,但求清晰實用。

基礎(chǔ)操作

  • git init [project-name]
  • git diff 顯示add以前的不同點
  • git diff --staged顯示add以后文件和上一版的區(qū)別
  • git status
  • git add [file] OR git add -A OR git add .
  • git reset [file] OR git rm --cached [file] git add的逆操作,unstage
  • git commit -m "[descriptive message]"
  • git log OR git log --oneline
  • git checkout [SHA] 我就看看你當(dāng)初的樣子,不能改動。
  • git checkout master 回到現(xiàn)實
  • git revert [SHA] => ;wq 單獨(dú)把某次commit效果去除掉(git log里多了一個commit,用來抵消你那次commit)
  • git reset [SHA] 把某次commit之后的遞交都退回到stage階段。文件內(nèi)容不會變動。
  • git reset [SHA] --hard 文件內(nèi)容也刪除了。No way back!

Q&A:

Q:add、commit?為什么要分成2步?

A:commit相當(dāng)于給現(xiàn)在的代碼拍快照(也有說是游戲里的安全存檔),add就是拍快照前的準(zhǔn)備工作,類似于快門的兩段式設(shè)計中的第一步。這樣你也不需要頻繁commit。另外你可以用add分批次commit,以后rollback的時候顆粒度更小。

tips

  • 每次小功能跑通了就得commit。不要囤著。(否則要你roll back一個地方,其他的不變,你就傻眼了)
  • commit要把每次的小功能寫清楚,以后才不會看不懂

處理分支

Git一開始只有一條master主線。有一天,一起協(xié)作的小伙伴小寶想要單獨(dú)測試自己的新代碼。為了不破壞主線代碼,他“復(fù)制”了一份主線,給自己獨(dú)立分支,隨便折騰,也不會影響主線。這就是branch,開分支。

master branch應(yīng)該保持持續(xù)可用,對外公開。所以新的功能應(yīng)該在分支里跑通了再merge。

新建分支:

git branch feature-1

轉(zhuǎn)到新分支上:

git checkout feature-a

??合并為一步:

git checkout -b feature-a

查詢分支:

git branch -a

刪除分支:

git branch master => git branch -D feature-a

合并分支:(先回到master才能合并)

git branch master => git merge feature-a

合并有沖突時,git把變化都放在master里,你自己改好以后再add/commit=>:wq

遠(yuǎn)程倉庫那些事

本地repo上傳到GitHub新倉庫

  1. 先在GitHub上新建一個repo,名字和本地文件夾相同。不用加README。復(fù)制repo鏈接。
  2. 回到本地terminal,add/commit所有變動,用status確認(rèn)nothing to commit
  3. git push [url] master
  4. 之后變得commit以后,使用git push [url] master。如果每次輸入url很麻煩,可以如下操作:
    1. 先新建一個aliasgit remote add origin [url]
    2. 以后就可以使用 git push origin master

GitHub新建repo以后clone到本地

  1. 先在GitHub上新建一個repo。這次可以加README。
  2. 復(fù)制鏈接
  3. 回到本地terminal
  4. git clone [url]
  5. git remote -v 查詢遠(yuǎn)程alias名稱
  6. 變動后提交:git push origin master

使用遠(yuǎn)端和其他人合作開發(fā)的workflow (NetNinja推薦的,并且每個人都有編輯權(quán)限)

  1. 先回到本地master
  2. git pull origin master
  3. 假設(shè)你在這個基礎(chǔ)上開發(fā)新特性 git checkout -b feature-c
  4. add/commit以后,不要直接合并本地master,先上傳到remote的feature-c分支,讓其他人確認(rèn)過,在remote端merge,然后再pull回本地repo。
  5. 所以這時候先git push origin feature-c
  6. 然后登錄GitHub倉庫,點擊compare & pull request。
  7. 處理conflict以后merge,同時點擊刪除branch。Done!
  8. 回到local,先pull最新的更新。
    1. git checkout master
    2. git pull origin master
  9. git checkout -b feature-d
  10. 循環(huán)
  11. 總結(jié):在本地,永遠(yuǎn)在新的branch上工作,push到遠(yuǎn)端的分支,在遠(yuǎn)端merge,在pull回本地。

使用fork為open source project做貢獻(xiàn)的workflow(你沒有直接編輯權(quán)限)

  1. 點擊fork
  2. 你自己賬戶下會生成一份相同的repo
  3. clone到本地:復(fù)制鏈接,回到本地 git clone [url]
  4. 編輯,直接在master分支上add/commit后,推送到自己賬戶下的repo master分支 git push origin master
  5. 到GitHub的repo里點擊new pull request

問答

Q:Orphan分支又是什么?為什么要設(shè)計這個類型?方法是什么?

A:

Git - git-checkout Documentation

如何建立一個沒有 Parent 的獨(dú)立 Git branch | ihower { blogging }

Q:如何給他人分享編輯權(quán)限?

A:

其他思考

git ingore用什么用?

其他組織使用什么workflow?和Net Ninja的比較呢?

參考

Git & GitHub Tutorial for Beginners - YouTube Net Ninja Tutorial

Git - Reference

Learn Git Branching

Git - What a Branch Is

Learn Git Branching

Generating a new SSH key and adding it to the ssh-agent - User Documentation SSH創(chuàng)建

github-git-cheat-sheet Git Cheat Sheet

Log

  • 2019年初:第一稿。用時2小時。
  • 2019年1月30日:全忘了。重讀,重寫。看完了NetNinja的教程。發(fā)現(xiàn)第一次寫的理解有誤。用時3小時。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容