GitHub 入門方法有哪些?


前端實習生,入職前只是翻了一點入門視頻,結果入職後被git虐成狗,摸索了一個月,現在剛剛找到點門道。(題主想要的是github學習,但從個人的經歷來說,如果不把git基礎打牢,那些教學視頻簡直如天書一般。。。)

我的學習之路是:

1. Git教程 - 廖雪峰的官方網站

——入門教程,不涉及太多的原理,但作者思路清晰,總結歸納的很詳細,刷兩遍有個初始概念,可應付工作中七八成的情況。

2. Git - Book

——此書是進階的重中之重,主要章節是1、2、3、5、6章,新手可先把第4章跳過。此書配得上任何程度的精讀,再配合適當的練習感覺至少可以應付平時工作9成以上的情況了。如英語好的同學還是建議讀原版。渣渣如我選擇先過一遍中文版再讀原版。

3. Learn Git Branching

——深入學習分支的概念,圖文並茂的體會rebase/cherry-pick等優雅的命令。

4. GitHub入門與實踐 (豆瓣)

——這本書比較簡單(也是基於前三個階段的基礎才會覺得簡單),保持了日式技術書籍一貫的事無巨細。講解了github的界面交互和基本原理,如果工作中用的是gitlab、bitbucket這種遠程倉庫,這本書基本可以替代原生文檔。

5. Git權威指南 (豆瓣)

——此書為高階,深入剖析了git的設計原理甚至是代碼實現。作者思路清晰,事無巨細。幾乎是細摳每一個命令的原理、實現思路、原代。(難能可貴的是,作者是中國人)

6.stackflow/google/segmentfault/...

——完成前五步,感覺基本就差不多了,其他問題就只能靠搜索了。(以下為個人添加收藏夾的一些具體問題)

其他:

我司以前用的gerrit/jira,現在已遷移到gitlab。作為初入門的渣渣,我個人的習慣是用圖形化界面用來看分支結構(sourcetree),所有git命令都在命令行里實現。

git是實操型的技術,理論基礎雖然是前提保障,但還是要多練


不太清楚是學習GitHub的使用,還是學習GitHub裡面好的開源項目。

1. Using GitHub

Hello World · GitHub Guides

如果把GitHub看成是語言,上面是Hello World。

然後在花15分鐘,在線的簡單的課程,算是了解git的一個過程。

Code School - Try Git

2. Trending repositories

如何找對自己感興趣語言的活躍項目。

Trending repositories on GitHub today · GitHub

列出所有語言的活躍項目,可以找到一些自己感興趣的,學習下。

3. 什麼最熱門

GitHut - Programming Languages and GitHub

可以看下,GitHut做了一個數據分析,

去年的Q4,JavaScript遠遠領先,得益於Node系列的崛起。最近也是在做一套全棧的系統,client server,都是JavaScript開發的。

還有三個我mark出來的語言,上升比較快。

R語言,~

Go語言,~

Swift語言,~

了解趨勢,可以擁抱未來,有效提升自我價值。

有空我在補充~


應讀者要求,準備連載從0學習GitHub系列,目前正在連載中,不妨跟著我的這個系列來一起學習,絕對0門檻!

從0開始學習 GitHub 系列之「初識 GitHub」 - AndroidDeveloper - 知乎專欄

從0開始學習 GitHub 系列之「加入 GitHub」 - AndroidDeveloper - 知乎專欄

待續...


我看過的一些不錯的Git學習教程:

  • 廖雪峰的Git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
  • Git 工作流程(阮一峰):http://www.ruanyifeng.com/blog/2015/12/git-workflow.html
  • 菜鳥教程-Git簡明教程:http://www.runoob.com/manual/git-guide/
  • Git Book:https://git-scm.com/book/zh/v2

在日常工作中,通常來說,只要掌握一些主要的Git命令,已經足夠應付大多數的工作了,而Cheat Sheet(速查表)可以幫助我們快速查詢Git常用命令:

(圖片整理自網路)


工具, 現用現查. 別把時間浪費在這裡, 別把這件事想的太難需要佔用你太長時間做準備工作.


Git的使用沒啥可說的,看官方的doc已經很全面了。

另當年有人在Gist做了一份Github上活躍用戶的排名:https://gist.github.com/paulmillr/2657075/

僅作參考,可以考慮多關注下各領域大牛們的時間線。


廖雪峰的git教程,入門挺不錯。

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000


github的功能比較多,其中最主要的功能就是版本管理了,常用於版本管理的git命令並不是很多,以下進行展開說明。

引言:

http://blog.csdn.net/sinat_22991367/article/details/51784543

關於Git的教程網路上大神們都已經寫的非常詳細完備了,再加上Git非常友好的提示說明與用戶文檔,原理與操作我就不在這裡做過多冗餘的介紹了,主要將一些常用的命令總結出來,方便自己查看回顧。

相比於CVS和SVN這些集中式的版本控制系統不但速度慢,而且必須聯網才能使用。Git不單是不必聯網這麼簡單,Git極其強大的分支管理,分散式版本控制。讓Git成為目前世界上最火爆的版本控制系統。

安裝初始化:

Linux安裝git,紅帽系列yum install git/烏班圖apt-get install git

git安裝好後還需要進行設置:設置你的用戶名和郵箱

#git config --global user.name "Your Name"
#git config --global user.email "email@example.com"

Linux系統下直接輸入git若出現以下信息,表示已經安裝成功。

usage: git [--version] [--exec-path[=GIT_EXEC_PATH]] [--html-path]
[-p|--paginate|--no-pager] [--no-replace-objects]
[--bare] [--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
[--help] COMMAND [ARGS]

The most commonly used git commands are:
add Add file contents to the index
bisect Find by binary search the change that introduced a bug
branch List, create, or delete branches
checkout Checkout a branch or paths to the working tree
clone Clone a repository into a new directory
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
fetch Download objects and refs from another repository
grep Print lines matching a pattern
init Create an empty git repository or reinitialize an existing one
log Show commit logs
merge Join two or more development histories together
mv Move or rename a file, a directory, or a symlink
pull Fetch from and merge with another repository or a local branch
push Update remote refs along with associated objects
rebase Forward-port local commits to the updated upstream head
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
show Show various types of objects
status Show the working tree status
tag Create, list, delete or verify a tag object signed with GPG

See "git help COMMAND" for more information on a specific command.

接下來你就可以創建git倉庫安靜的使用git了,創建完git倉庫別忘了初始化git

#git init

出現以下提示說明git初始化完成。

Initialized empty Git repository in /Test/learngit/.git/

初始化完成後使用

#ls -a

可以發現目錄下多了一個.git文件夾,這個目錄下的文件是用來管理版本庫的。(但是我們的git倉庫目錄仍然是/Test/learngit/)

現在我們就可以將自己需要進行版本控制的文件放到git倉庫中了。

常用命令詳解:

從上我們可以看到Git的大部分常用命令,下來我們就對這些命令進行解釋說明:

【添加和提交】

例如我們現在有一個first.txt文件,

我們將其放到/Test/learngit/下的子目錄test中,

用命令git add告訴Git,把文件添加到倉庫:

#git add first.txt

add成功後沒有提示。

用命令git commit告訴Git,把文件提交到倉庫:

#git commit -m "this is a test file"

-m 後面輸入的是本次提交的說明。也可以不加-m 直接提交,出現警告後wq保存退出。

出現以下提示說明提交成功。

[master (root-commit) a1767f9] this is a test file
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 test/firstone.txt

【注意】

我們在git倉庫文件夾下建立文件實際就是將文件放到了工作區。

第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;

第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支(也即版本庫)。

【顯示Git倉庫當前狀態】

#git status 命令可以顯示倉庫當前的狀態。
# On branch master
# Changes to be committed:
# (use "git reset HEAD &..." to unstage)
#
# modified: firstone.txt
#
# Changed but not updated:
# (use "git add &..." to update what will be committed)
# (use "git checkout -- &..." to discard changes in working directory)
#
# modified: firstone.txt
#

【查看當前改動】

#git diff first.txt 可以查看當前已經改動但還未提交的內容與先前的差異。
diff --git a/test/firstone.txt b/test/firstone.txt
index b7ee639..0497bd7 100644
--- a/test/firstone.txt
+++ b/test/firstone.txt
@@ -1,2 +1,3 @@
This is a test file.
Hello world!
+Modify

【顯示提交日誌】

#git log 顯示提交日誌

commit 610471ea2cbcec59860547a5b7d1899504f45315 (版本號)
Author: tx_mazi &<2298929097@qq.com&>
Date: Tue Jun 21 09:52:07 2016 +0800

add modify

commit a1767f9df286f997ce727ecbcaa04731e01fa72e
Author: tx_mazi &<2298929097@qq.com&>
Date: Tue Jun 21 09:34:22 2016 +0800

this is a test file

【版本回退】

[撤銷工作區修改]

#git checkout -- file

把文件在工作區的修改全部撤銷,讓這個文件回到最近一次git commit或git add時的狀態。

如果暫存區有該文件的上個版本(修改前git add但沒有git commit)就把工作區文件恢復至和暫存區版本一樣,如果暫存區沒有該文件的上個版本就把工作區的文件恢復至和版本庫中一樣。

[撤銷暫存區修改]

在git commit之前我們還可以通過git reset命令來回退版本

#git reset HEAD file

可以把暫存區的修改撤銷掉(unstage),重新放回工作區。

git reset命令:版本回退 可以直接用HEAD^ 也可以後跟commit_id版本號

#git reset --hard HEAD^

Git必須知道當前版本是哪個版本,在Git中,用HEAD表示當前版本,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不

過來,所以寫成HEAD~100。

#git reset --hard 610471ea

git reflog用來記錄你的每一次git命令。用它你可以找回之前的版本號。

【注意】

git checkout — file撤銷工作區的修改

git reset HEAD file命令 撤銷暫存區的修改

【刪除文件】

#git rm file

用於刪除一個文件(或文件夾 -r)[注意:手動rm後一定要再git rm一下,然後再git commit然後再git push才會刪除遠程倉庫中的文件]

【關聯遠程倉庫】

生成本機的公鑰和私鑰:

# ssh-keygen -t rsa -C "youremail@example.com"

將公鑰添加到github上

[在本地關聯遠程庫]

現在github上創建一個Git倉庫。在本地創建同名本地庫用於和遠程倉庫關聯。

要關聯一個遠程庫,使用命令

#git remote add origin git@SERVER-NAME:PATH/REPO-NAME.git;
#git remote add origin git@github.com:mazilaile/tree.git
#git push -u origin master

由於遠程庫是空的,我們第一次推送master分支時,加上了-u參數,Git不但會把本地的master分支內容推送的遠程新的master分支,還會把本地的master分支和遠程的master分支關聯起來,在以後的推送或者拉取時就可以簡化命令。

把本地庫的內容推送到遠程,用git push命令,實際上是把當前分支master推送到遠程。

#git push origin master

[在本地對遠程庫進行克隆]

git clone命令克隆遠程倉庫的內容到本機

#git clone git@github.com:YourGit/YourRepo.git

【分支】

創建、切換和刪除分支

[創建並切換分支]

#git checkout -b tst

git checkout命令加上-b參數表示創建並切換,相當於以下兩條命令:

#git branch tst 創建分支
* master
tst
#git checkout tst 切換分支
Switched to branch "tst"

[查看都有哪些分支]

#git branch 查看都有哪些分支,帶星號的是當前分支
master
* tst

[合併分支]

#git merge tst 合併分支到主分支
#git merge --no-ff -m "merge with no-ff" tst

合併分支到主分支但是禁用Fast forward,刪除分支後,仍然保留分支信息。合併分支時,加上–no-ff參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。

成功

Updating 9d85dda..23b93d4
Fast-forward
README.md | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

有衝突失敗

Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

解決衝突:

# git status 查看有衝突的文件
# cat README.md 用cat命令查看該文件

# ThinkGame

Fantastic training program

start

&<&<&<&<&<&<&< HEAD

branch master

=======

branch tst

&>&>&>&>&>&>&> tst

手動修改文件再add、commit後合併分支

[刪除分支]

#git branch -d tst 刪除分支
#git branch -D tst 刪除一個沒有合併過的分支

[查看分支合併情況]

用帶參數的git log查看分支的合併情況

#git log --graph --pretty=oneline --abbrev-commit

–pretty 按指定格式顯示日誌信息,可選項有:oneline,short,medium,full,fuller,email,raw以及format:&,默認為medium,可以通過修改配置文件來指定默認的方式。

–abbrev-commit 僅顯示 SHA-1 的前幾個字元,而非所有的 40 個字元。

[當前工作區的保存(不提交)與恢復]

#git stash 不提交,將當前工作區中的內容保存起來,等完成緊要分支任務後再恢復
#git stash list 查看剛才的工作區中的內容存到哪去
#git stash pop 將剛剛工作區中的內容恢復,並將stash內容刪除

#git remote -v查看遠程庫的信息 -v顯示詳細內容
origin git@github.com:mazilaile/ThinkGame.git (fetch)
origin git@github.com:mazilaile/ThinkGame.git (push)
(遠程倉庫的默認名稱是origin)

[向遠程庫推送分支]

推送分支,本地可以建立許多分支,但是並不是所有的分支都需要推送到遠程庫中

#git push origin Branch-Name

如果向遠程推送分支失敗,查看錯誤信息,如果是和其他人的推送有衝突,則

需要先用git pull將遠程分支從origin/Branch-Name抓下來試圖合併;

如果git pull提示「no tracking information」,則說明本地分支和遠程分支的鏈接關係沒有創建,

#git branch --set-upstream branch-name origin/Branch-Name

如果合併有衝突,則解決衝突,然後再在本地提交

在本地創建和遠程分支對應的分支,使用

#git checkout -b branch-name origin/branch-name

本地和遠程分支的名稱最好一致;

【Git標籤】

Git的標籤雖然是版本庫的快照,但其實它就是指向某個commit的指

針(跟分支很像對不對?但是分支可以移動,標籤不能

移動),所以,創建和刪除標籤都是瞬間完成的。

[建立標籤]

#git tag & 在當前分支上打一個新標籤

查看歷史提交的commit id

#git log --pretty=oneline --abbrev-commit

–pretty 按指定格式顯示日誌信息,可選項有:oneline,short,medium,full,fuller,email,raw以及format:&,默認為medium,可以通過修改配置文件來指定默認的

方式。

–abbrev-commit 僅顯示 SHA-1 的前幾個字元,而非所有的 40 個字元。

[給指定提交打標籤]

#git tag Commit_Id 給指定的提交打標籤

[查看標籤]

#git tag 查看所有標籤
#git show & 查看指定標籤信息

還可以創建帶有說明的標籤,用-a指定標籤名,-m指定說明文字:

#git tag -a v0.1 -m "version 0.1 released" 3628164

[刪除標籤]

#git tag -d v0.1 刪除標籤

如果標籤已經推送到遠程

先在本地刪除,再在遠程刪除

#git push origin :refs/tags/&可以刪除一個遠程標籤

[推送標籤到遠程]

如果要推送某個標籤到遠程,使用命令

#git push origin &

【忽略文件向遠程推送】

在Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去,Git就會自動忽略這些文件。不需要從頭寫.gitignore文件,GitHub已經為我們準備了各種配置文件,只需要組合一下就可以使用了。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore

#git check-ignore命令檢查.gitignore中哪個規則寫錯了


這個玩兒一遍就差不多啦

Learn Git Branching


http://git.oschina.net

幫助教程全中文,玩會了再去GitHub


Step1:folk一個repository:https://github.com/hot13399/spring-mvc-mini
Step2: folk 完了clone到本地:
git clone https://github.com/hot13399/spring-mvc-mini
Step3: 修改resources/application.properties文件
Step4: 將修改的我文件添加到commit group
git add resources/application.properties
Step5: git commit -m "第一次修改"
Step6: git push origin master
輸入用戶名,密碼。完。


看過另一個提問裡面一位靈魂畫手的答案,也看過廖雪峰的Git教程。對於小白而言,前者零散,後者繁瑣。讓一個新手入門,最重要的就是讓其完成一個簡易的小項目,但是用到儘可能多功能和模塊,尤其是核心部分全覆蓋

GitHub自己的入門教程(Hello World · GitHub Guides)完全符合這個要求。跟著教程十分鐘,就可以大致明白怎麼用GitHub和為什麼用GitHub。當然,適合我的不一定適合其他人,小白們多看看多試試才是硬道理。畢竟大神說過,整就牛

如果因為教程是英文的就跳過不看,那就放棄GitHub吧。GitHub全站都是英文的,上面很多優秀的項目都指明要使用英文交流。

附上本人根據這個教程做出來的repository(lifangzheng/hello-world)。


sourceTree, github Desktop

非要用命令行就當我沒說


http://udacity.com上有免費的教程,講得邏輯清晰、實用性強,還有各種練習和項目實戰。想要學習的推薦去·Udacity·


看到好多人推薦廖雪峰的Git教程,我也是從他個人網站上學的,github上還保留著去年學的時候創建的repository。

然而作為學渣並沒有寫多少代碼。只是現在上操作系統課,喜歡把寫的代碼放上去,相當於記錄學習的歷程吧。

基本上是在娛樂,沒有乾貨

http://steiensgate.github.io


這本書,不過我還沒看,之前看過廖雪峰的git教程,還不錯


《21天精通github》《從零開始學github》《github從初學到精通》→_→


關鍵是會用github網站,還是會用git。

git的使用,看看官方文檔,最常用的幾個命令記牢就差不多。

如果不是多人開發,branch的protected,conflict的處理可能都用不上。

個人覺得,sourcetree能不用還是盡量不用,

畢竟命令行才是精華。

當然,我說用命令行可能你會把我批判一番,

畢竟我喜歡拿命令行裝x


推薦閱讀:

為何電腦插電視上玩遊戲比顯示器更流暢?
win7資源管理器一直重啟是什麼原因?怎麼解決?
你如何看待寫著區域賽銅牌的簡歷?
大學專業中:電子信息類專業和計算機類專業有什麼區別?
一個理論計算機科學家眼裡的碼農是怎樣的?

TAG:編程 | 計算機 | Git | GitHub |