一、基礎
1.初始化git,會在home下生成.gitconfig文件。
git config --global user.name xxx
git config --global user.email [email protected]
2.不使用--global參數時在某項目頂層目錄下生成私有配置config,報告單獨的名字和郵箱
xxx項目目錄/.git/config
3.需要一個項目的倉庫,有兩種方式得到:
git clone
git init
1) 如何clone一個倉庫:倉庫可以使用http(s)://協議,ssh://協議,git://協議
git clone [email protected]:linker99/myfirst_test.git
然後當前目錄下就會生成項目目錄myfirst_test
2)進入任何一個已經存在的文件夾執行:git init ,就會把當前目錄變爲git倉庫。並且在目錄下生成.git文件夾
-
git add 添加新創建或者修改過得文件到本地倉庫緩衝區(index)
git add new.txt
git add *
5.git commit 從緩存區或者untracked狀態提交到本地倉庫
git commit -m "添加一個測試文件
git commit -a -m "" 這個命令可以直接跳過git add 把已經修改的文件一塊提交,但是新建文件不行,智能使用git add 然後再用git commit -
git push提交本地到遠端倉庫
- git status 查看git倉庫狀態
對於untracked狀態的文件,可以執行git add -
git diff --cached 可以查看add後緩存區裏面的那些文件被修改了。
git diff 不加--cached查看已經修改但是還沒有add到緩衝區裏的文件,但是新文件不顯示執行了git commit後diff就看不到了 ****比較兩個分支的差異 git diff master test 或者git branch master git diff test 還可以只比較某個文件 git diff test file1 統計不同分支的改動,多少行 git diff test --stat
- git rm與git rm --cached
當我們需要刪除暫存區或分支上的文件, 同時工作區也不需要這個文件了, 可以使用
git rm file_path
git commit -m 'delete somefile'
git push
當我們需要刪除暫存區或分支上的文件, 但本地又需要使用, 只是不希望這個文件被版本控制, 可以使用
git rm --cached file_path
git commit -m 'delete remote somefile'
git push - 當我門使用git init在本地創建一個倉庫,而沒有遠程倉庫時git remote add 命令來推送到遠程倉庫
git remote add origin [email protected]:linker99/myfirst_test.git
其中origin是本地主機名,可以自定義。 - 當我們使用git clone獲取到倉庫,而不是git init,那麼使用git push origin master 推送到遠程,第一次使用加上-u origin,以後就可以直接git push
git push -u origin master
12 . git branch 查看當前分支
git branch xxx創建一個本地分支
git checkout xxxx 切換當前分支 - 當我們在 新分支xxx和主分支master都開發了一些代碼,驗證ok,需要把xxx分支和人主線時。
先切換到主分支:git checkout master
再合併:git merge -m "註釋" xxx分支
此時可能會有衝突,可以使用git status查看,或者分別vi查看,或者
git diff查看。
然後:使用vim手動刪除衝突內容
git add xxx衝突文件
git commit -m ""
就可以完成衝入的一些解決操作。 - 但我們需要刪除已經被合併的分支時: git branch -d xxxx
git branch -D xxx 強制刪除 - 恢復合併的內容,或者上次commit的內容
git reset --hard HEAD^ -
如何合併的時候兩個分支的內容相同,只是註釋不同,git commit不產生一個新的提交,只是將當前分支指向合並進來的分支。
- git 日誌,顯示按提交時間的逆序,使用--reverse可以翻轉顯示
git log
顯示fs目錄下makefile文件從2.5開始的日誌
git log v2.5.. Makefile fs/
打印詳細提交日誌信息
git log --stat
單行顯示如下,還有medium,full,short,email,raw等格式,實在不行也可以自定義
git log --pretty=online
增加圖形功能
git log --graph --pretty=online
按圖形拓撲顯示
git log --pretty=format:'%h :%s' --topo-order --graph
二、分佈式入門
- 首先clone一個分支,假如兩個人的倉庫在一個電腦上
git clone /home/shiyanlou/gitproject myproject
然後第二個人在myproject裏面開發。提交
接下來,第一個人想合併第二個人的代碼,進入第一個人倉庫,
git pull /tmp/myproject master 就可以了,有可能要手動解決衝突- git remote 管理遠程倉庫
給遠程分支起個別名xxxx1
git remote add xxxx1 xxx遠程地址
git remote rm xxxx1刪除別名
git fetch xxxx1只拉去不與本地合併,相當於完成了git pull 的前半步,
可以使用
git log -p master..xxxx1/master 查看遠程修改
其中,xxxx1是遠程地址,第二個master是遠程分支名
接下來,就可以merge
git merge myrepo/master
- git remote 管理遠程倉庫
-
第一次git clone,下一次就可以直接使用git pull來更新代碼,因爲配置文件已經記錄了遠程地址,可以使用下面的命令查看
git config --get remore.origin.url -
不同主機,或者不同用戶clone,要求輸入遠程用戶密碼
git clone ip:/path/倉庫/ test
git clone localhost:/home/shiyanlou/gitproject test
5.如果是兩個開發的化,並且使用不同主機,可以使用分別拉去合併對方的代碼方式,通過ssh協議拉取
git clone ssh://ip/倉庫地址
6.如果是三個人以上的話,就需要一個公共倉庫,有個人要負責公共倉庫維護,別人都可以通過ssh協議或者http協議把代碼push上去
git push ssh://ip/倉庫地址, master:master
或者
git push ssh://ip/倉庫地址, master如果公共倉庫最近有更新,可以push失敗,所以需要先進行git pull再push
三、標籤
-
可以改一個commit好創建一個標籤,輕量級標籤
git tag stale-1 commit號
然後用git tag查看所有標籤2.如果一個標籤加上註釋就是標籤對象,不是輕量級標籤
git tag stale-1 commit號 -m "註釋"
如果使用-a 或者-F 則會啓動vim來添加註釋內容-
帶簽名的標籤
首先你需要在.git/config或~/.gitconfig裏面配置好pgpkey
git config (--global) user.signingkey <gpg-key-id>
然後就可以在打標是使用-s簽名
git tag -s stale-1 commit號 -m "註釋"如果key沒有在配置文件中,則可以臨時使用
git tag -u <gpg-key-id> stale-1 commit號 -m "註釋"
-