Git 學習筆記(Git教程-廖雪峰)


                      Git學習筆記

1、Git 的本地倉庫創建與使用

a)在安裝好git后,到所需要管理的目錄下,

    初始化一個Git倉庫,使用git init命令。

    添加文件到Git倉庫,分兩步:

  • 第一步,使用命令git add <file>,注意,可反復多次使用,添加多個文件;   //此時,文件修改只是保存到了暫存區

  • 第二步,使用命令git commit -m,完成。                       //git commit 之后,修改會同步到git分支,git commit只同步暫存區的版本

b)

  • 要隨時掌握工作區的狀態,使用git status命令。

  • 如果git status告訴你有文件被修改過,用git diff <filename>可以查看修改內容。

c)

  • HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id(HEAD^ 指的是上一個版本)

  • 穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。(git log --prrety=oneline )

  • 要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

d) 撤銷修改:

場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout -- file

場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫。

e)刪除文件:

當刪除本地文件后,版本庫中的文件可以用git rm file刪除,如果想回復的話,使用git checkout -- file還原。

ps:你只能恢復文件到最新版本,你會丟失最近一次提交后你修改的內容

2、Git的遠程倉庫使用

a) 創建ssh key, 使用ssh-keygen -t rsa -C "youremail@example.com" 命令,將用戶主目錄下生成的id_rsa.pub公鑰內容復制到傲github中,就可以使用免費的github倉庫了。

b)要關聯一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git查詢遠程倉庫的命令:git remote -v

關聯后,使用命令git push -u origin master第一次推送master分支的所有內容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

c)克隆遠程庫

要克隆一個倉庫,首先必須知道倉庫的地址,然后使用git clone命令克隆。

Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快。

3、分支管理

a)

查看分支:git branch

創建分支:git branch <name>

切換分支:git checkout <name>

創建+切換分支:git checkout -b <name>

合並某分支到當前分支:git merge <name>

刪除分支:git branch -d <name>

創建分支分支提交合並分支刪除分支

b)解決沖突:

當Git無法自動合並分支時,就必須首先解決沖突。解決沖突后,再提交,合並完成。

git log --graph命令可以看到分支合並圖。

c)分支策略

首先,master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;

那在哪干活呢?干活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合並到master上,在master分支發布1.0版本;

你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支,時不時地往dev分支上合並就可以了。

所以,團隊合作的分支看起來就像這樣:

ps:合並分支時,加上--no-ff參數就可以用普通模式合並,合並后的歷史有分支,能看出來曾經做過合並,而fast forward合並就看不出來曾經做過合並。

d)bug分支:

修復bug時,我們會通過創建新的bug分支進行修復,然后合並,最后刪除;

當手頭工作沒有完成時,先把工作現場git stash一下,然后去修復bug,修復后,再git stash pop,回到工作現場。當 git stash list不止一個時,可以用git stash apply stash(id)回到指定場所,但是不會刪除list中的內容。可以用git stash drop命令刪除

e)Feture 分支:

開發一個新feature,最好新建一個分支;

如果要丟棄一個沒有被合並過的分支,可以通過git branch -D <name>強行刪除。

f)多人協作

  • 查看遠程庫信息,使用git remote -v

  • 本地新建的分支如果不推送到遠程,對其他人就是不可見的;

  • 從本地推送分支,使用git push origin branch-name,如果推送失敗,先用git pull抓取遠程的新提交;

  • 在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致;

  • 建立本地分支和遠程分支的關聯,使用git branch --set-upstream branch-name origin/branch-name

  • 從遠程抓取分支,使用git pull,如果有沖突,要先處理沖突。

4、標簽管理:(Git的標簽雖然是版本庫的快照,但其實它就是指向某個commit的指針(跟分支很像對不對?但是分支可以移動,標簽不能移動),所以,創建和刪除標簽都是瞬間完成的。)

a)創建標簽:

  • 命令git tag <name>用於新建一個標簽,默認為HEAD,也可以指定一個commit id;

  • git tag -a <tagname> -m "blablabla..."可以指定標簽信息;(git show tagname可以查看到標簽信息)

  • git tag -s <tagname> -m "blablabla..."可以用PGP簽名標簽;

  • 命令git tag可以查看所有標簽。

b)標簽操作:

  • 命令git push origin <tagname>可以推送一個本地標簽;

  • 命令git push origin --tags可以推送全部未推送過的本地標簽;

  • 命令git tag -d <tagname>可以刪除一個本地標簽;

  • 命令git push origin :refs/tags/<tagname>可以刪除一個遠程標簽。

5、使用Github

  • 在GitHub上,可以任意Fork開源倉庫;

  • 自己擁有Fork后的倉庫的讀寫權限;

  • 可以推送pull request給官方倉庫來貢獻代碼。

6、自定義Git

a)git config --global color.ui true 可以使Git顯示顏色

b)

  • 忽略某些文件時,需要編寫.gitignore

  • .gitignore文件本身要放到版本庫里,並且可以對.gitignore做版本管理!

  • 不需要從頭寫.gitignore文件,GitHub已經為我們准備了各種配置文件,只需要組合一下就可以使用了。所有配置文件可以直接在線瀏覽:https://github.com/github/gitignore

c)配置別名:

git config --global alias.st status

git config --global alias.co checkout

git config --global alias.ci commit
git config --global alias.br branch
git config --global alias.unstage 'reset HEAD'
git config --global alias.last 'log -1'

git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"

配置Git的時候,加上--global是針對當前用戶起作用的,如果不加,那只針對當前的倉庫起作用。

配置文件放哪了?每個倉庫的Git配置文件都放在.git/config文件中,而當前用戶的Git配置文件放在用戶主目錄下的一個隱藏文件.gitconfig中。 

7、搭建Git服務器,參考網址

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




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM