Git 常用命令

轉載自:http://www.onmoso.com/Linux/252.html
git
branch 查看本地所有分支
git status 查看當前狀態
git commit 提交
git branch -a 查看所有的分支
git branch -r 查看本地所有分支
git commit -am "init" 提交併且加註釋
git remote add origin git@192.168.1.119:ndshow
git push origin master 將文件給推到服務器上
git remote show origin 顯示遠程庫origin裏的資源
git push origin master:develop
git push origin master:hb-dev 將本地庫與服務器上的庫進行關聯
git checkout --track origin/dev 切換到遠程dev分支
git branch -D master develop 刪除本地庫develop
git checkout -b dev 建立一個新的本地分支dev
git merge origin/dev 將分支dev與當前分支進行合併
git checkout dev 切換到本地dev分支
git remote show 查看遠程庫
git add .
git rm 文件名(包括路徑) 從git中刪除指定文件
git clone git://github.com/schacon/grit.git 從服務器上將代碼給拉下來
git config --list 看所有用戶
git ls-files 看已經被提交的
git rm [file name] 刪除一個文件
git commit -a 提交當前repos的所有的改變
git add [file name] 添加一個文件到git index
git commit -v 當你用-v參數的時候可以看commit的差異
git commit -m "This is the message describing the commit" 添加commit信息
git commit -a    -a是代表add,把所有的change加到git index裏然後再commit
git commit -a -v  一般提交命令
git log 看你commit的日誌
git diff 查看尚未暫存的更新
git rm a.a 移除文件(從暫存區和工作區中刪除)
git rm --cached a.a 移除文件(只從暫存區中刪除)
git commit -m "remove"  移除文件(從Git中刪除)
git rm -f a.a 強行移除修改後文件(從暫存區和工作區中刪除)
git diff --cached 或 $ git diff --staged 查看尚未提交的更新
git stash push 將文件給push到一個臨時空間中
git stash pop 將文件從臨時空間pop下來
---------------------------------------------------------
git remote add origin git@github.com:username/Hello-World.git
git push origin master 將本地項目給提交到服務器中
-----------------------------------------------------------
git pull 本地與服務器端同步
-----------------------------------------------------------------
git push (遠程倉庫名) (分支名) 將本地分支推送到服務器上去。
git push origin serverfix:awesomebranch
------------------------------------------------------------------
git fetch 相當於是從遠程獲取最新版本到本地,不會自動merge
git commit -a -m "log_message" (-a是提交所有改動,-m是加入log信息) 本地修改同步至服務器端 :
git branch branch_0.1 master                  從主分支master創建branch_0.1分支
git branch -m branch_0.1 branch_1.0       將branch_0.1重命名爲branch_1.0
git checkout branch_1.0/master              切換到branch_1.0/master分支
du -hs

-----------------------------------------------------------
mkdir WebApp
cd WebApp
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@github.com:daixu/WebApp.git
git push -u origin master


注意事項

由 project/.git/config 可知: (若有更多, 亦可由此得知)

    origin(remote) 是 Repository 的版本
    master(branch) 是 local 端, 正在修改的版本

平常沒事不要去動到 origin, 如果動到, 可用 git reset --hard 回覆到沒修改的狀態.

Git 新增檔案

    git add . # 將資料先暫存到 staging area, add 之後再新增的資料, 於此次 commit 不會含在裡面.
    git add filename
    git add modify-file # 修改過的檔案, 也要 add. (不然 commit 要加上 -a 的參數)
    git add -u # 只加修改過的檔案, 新增的檔案不加入.
    git add -i # 進入互動模式

Git 刪除檔案

    git rm filename

Git 修改檔名、搬移目錄

    git mv filename new-filename

Git status 看目前的狀態

    git status # 看目前檔案的狀態

Git Commit

    git commit
    git commit -m 'commit message'
    git commit -a -m 'commit -message' # 將所有修改過得檔案都 commit, 但是 新增的檔案 還是得要先 add.
    git commit -a -v # -v 可以看到檔案哪些內容有被更改, -a 把所有修改的檔案都 commit

Git 產生新的 branch

    git branch # 列出目前有多少 branch
    git branch new-branch # 產生新的 branch (名稱: new-branch), 若沒有特別指定, 會由目前所在的 branch / master 直接複製一份.
    git branch new-branch master # 由 master 產生新的 branch(new-branch)
    git branch new-branch v1 # 由 tag(v1) 產生新的 branch(new-branch)
    git branch -d new-branch # 刪除 new-branch
    git branch -D new-branch # 強制刪除 new-branch
    git checkout -b new-branch test # 產生新的 branch, 並同時切換過去 new-branch
    # 與 remote repository 有關
    git branch -r # 列出所有 Repository branch
    git branch -a # 列出所有 branch

Git checkout 切換 branch

    git checkout branch-name # 切換到 branch-name
    git checkout master # 切換到 master
    git checkout -b new-branch master # 從 master 建立新的 new-branch, 並同時切換過去 new-branch
    git checkout -b newbranch # 由現在的環境為基礎, 建立新的 branch
    git checkout -b newbranch origin # 於 origin 的基礎, 建立新的 branch
    git checkout filename # 還原檔案到 Repository 狀態
    git checkout HEAD . # 將所有檔案都 checkout 出來(最後一次 commit 的版本), 注意, 若有修改的檔案都會被還原到上一版. (git checkout -f 亦可)
    git checkout xxxx . # 將所有檔案都 checkout 出來(xxxx commit 的版本, xxxx 是 commit 的編號前四碼), 注意, 若有修改的檔案都會被還原到上一版.
    git checkout -- * # 恢復到上一次 Commit 的狀態(* 改成檔名, 就可以只恢復那個檔案)

Git diff

    git diff master # 與 Master 有哪些資料不同
    git diff --cached # 比較 staging area 跟本來的 Repository
    git diff tag1 tag2 # tag1, 與 tag2 的 diff
    git diff tag1:file1 tag2:file2 # tag1, 與 tag2 的 file1, file2 的 diff
    git diff # 比較 目前位置 與 staging area
    git diff --cached # 比較 staging area 與 Repository 差異
    git diff HEAD # 比較目前位置 與 Repository 差別
    git diff new-branch # 比較目前位置 與 branch(new-branch) 的差別
    git diff --stat

Git Tag

    git tag v1 ebff # log 是 commit ebff810c461ad1924fc422fd1d01db23d858773b 的內容, 設定簡短好記得 Tag: v1
    git tag 中文 ebff # tag 也可以下中文, 任何文字都可以
    git tag -d 中文 # 把 tag=中文 刪掉

Git log

    git log # 將所有 log 秀出
    git log --all # 秀出所有的 log (含 branch)
    git log -p # 將所有 log 和修改過得檔案內容列出
    git log -p filename # 將此檔案的 commit log 和 修改檔案內容差異部份列出
    git log --name-only # 列出此次 log 有哪些檔案被修改
    git log --stat --summary # 查每個版本間的更動檔案和行數
    git log filename # 這個檔案的所有 log
    git log directory # 這個目錄的所有 log
    git log -S'foo()' # log 裡面有 foo() 這字串的.
    git log --no-merges # 不要秀出 merge 的 log
    git log --since="2 weeks ago" # 最後這 2週的 log
    git log --pretty=oneline # 秀 log 的方式
    git log --pretty=short # 秀 log 的方式
    git log --pretty=format:'%h was %an, %ar, message: %s'
    git log --pretty=format:'%h : %s' --graph # 會有簡單的文字圖形化, 分支等.
    git log --pretty=format:'%h : %s' --topo-order --graph # 依照主分支排序
    git log --pretty=format:'%h : %s' --date-order --graph # 依照時間排序

Git show

    git show ebff # 查 log 是 commit ebff810c461ad1924fc422fd1d01db23d858773b 的內容
    git show v1 # 查 tag:v1 的修改內容
    git show v1:test.txt # 查 tag:v1 的 test.txt 檔案修改內容
    git show HEAD # 此版本修改的資料
    git show HEAD^ # 前一版修改的資料
    git show HEAD^^ # 前前一版修改的資料
    git show HEAD~4 # 前前前前一版修改的資料

Git reset 還原

    git reset --hard HEAD # 還原到最前面
    git reset --hard HEAD~3
    git reset --soft HEAD~3
    git reset HEAD filename # 從 staging area 狀態回到 unstaging 或 untracked (檔案內容並不會改變)

Git grep

    git grep "te" v1 # 查 v1 是否有 "te" 的字串
    git grep "te" # 查現在版本是否有 "te" 的字串

Git stash 暫存

    git stash # 丟進暫存區
    git stash list # 列出所有暫存區的資料
    git stash pop # 取出最新的一筆, 並移除.
    git stash apply # 取出最新的一筆 stash 暫存資料. 但是 stash 資料不移除
    git stash clear # 把 stash 都清掉

Git merge 合併

    git merge
    git merge master
    git merge new-branch
    下述轉載自: ihower 的 Git 版本控制系統(2) 開 branch 分支和操作遠端 repo.x

        Straight merge 預設的合併模式,會有全部的被合併的 branch commits 記錄加上一個 merge-commit,看線圖會有兩條 Parents 線,並保留所有 commit log。
        Squashed commit 壓縮成只有一個 merge-commit,不會有被合併的 log。SVN 的 merge 即是如此。
        cherry-pick 只合併指定的 commit
        rebase 變更 branch 的分支點:找到要合併的兩個 branch 的共同的祖先,然後先只用要被 merge 的 branch 來 commit 一遍,然後再用目前 branch 再 commit 上去。這方式僅適合還沒分享給別人的 local branch,因為等於砍掉重練 commit log。

    指令操作

        git merge <branch_name> # 合併另一個 branch,若沒有 conflict 衝突會直接 commit。若需要解決衝突則會再多一個 commit。
        git merge --squash <branch_name> # 將另一個 branch 的 commit 合併為一筆,特別適合需要做實驗的 fixes bug 或 new feature,最後只留結果。合併完不會幫你先 commit。
        git cherry-pick 321d76f # 只合併特定其中一個 commit。如果要合併多個,可以加上 -n 指令就不會先幫你 commit,這樣可以多 pick幾個要合併的 commit,最後再 git commit 即可。

Git blame

    git blame filename # 關於此檔案的所有 commit 紀錄

Git 還原已被刪除的檔案

    git ls-files -d # 查看已刪除的檔案
    git ls-files -d | xargs git checkout -- # 將已刪除的檔案還原

Git 維護

    git gc # 整理前和整理後的差異, 可由: git count-objects 看到.
    git fsck --full

Git revert 資料還原

    git revert HEAD # 回到前一次 commit 的狀態
    git revert HEAD^ # 回到前前一次 commit 的狀態
    git reset HEAD filename # 從 staging area 狀態回到 unstaging 或 untracked (檔案內容並不會改變)
    git checkout filename # 從 unstaging 狀態回到最初 Repository 的檔案(檔案內容變回修改前)

Git Rollback 還原到上一版

    git reset --soft HEAD^
    編輯 + git add filename
    git commit -m 'rollback'

以下與 遠端 Repository 相關
Git remote 維護遠端檔案

    git remote
    git remote add new-branch http://git.example.com.tw/project.git # 增加遠端 Repository 的 branch(origin -> project)
    git remote show # 秀出現在有多少 Repository
    git remote rm new-branch # 刪掉
    git remote update # 更新所有 Repository branch
    git branch -r # 列出所有 Repository branch

抓取 / 切換 Repository 的 branch

    git fetch origin
    git checkout --track -b reps-branch origin/reps-branch # 抓取 reps-branch, 並將此 branch 建立於 local 的 reps-branch

刪除 Repository 的 branch

    git push origin :heads/reps-branch

相關網頁

    Git - note
    Git Study



每次更改代碼的操作

更新本地代碼到最新版本(需要merge才能合到本地代碼中)
    git fetch

合併更新後的代碼到本地
    git merge

更新代碼方式的另一種方法(git pull是git fetch和git merge命令的一個組合)
    git pull

修改代碼後,查看已修改的內容
    git diff –cached

將新增加文件加入到git中
    git add file1 file2 file3

從git中刪除文件
12     git rm file1git rm -r dir1

提交修改
    git commit -m ‘this is memo’

如果想省掉提交之前的 git add 命令,可以直接用
    git commit -a -m ‘this is memo’

commit和commit -a的區別, commit -a相當於:

第一步:自動地add所有改動的代碼,使得所有的開發代碼都列於index file中第二步:自動地刪除那些在index file中但不在工作樹中的文件第三步:執行commit命令來提交

提交所有修改到遠程服務器,這樣,其它團隊成員才能更新到這些修改
    git push

其它常用命令

顯示commit日誌
    git log

不僅顯示commit日誌,而且同時顯示每次commit的代碼改變。
    git log -p

回滾代碼:
    git revert HEAD

你也可以revert更早的commit,例如:
    git revert HEAD^

銷燬自己的修改
    git reset –hard

查看最新版本和上一個版本的差異(一個^表示向前推進一個版本)
    git diff HEADHEAD^

將branchname分支合併到當前分支中。(如果合併發生衝突,需要自己解決衝突)
    git merge branchname

解決衝突

當merge命令自身無法解決衝突的時候,它會將工作樹置於一種特殊的狀態,並且給用戶提供衝突信息,以期用戶可以自己解決這些問題。當然在這個時候,未發生衝突的代碼已經被git merge登記在了index file裏了。如果你這個時候使用git diff,顯示出來的只是發生衝突的代碼信息。

在你解決了衝突之前,發生衝突的文件會一直在index file中被標記出來。這個時候,如果你使用git commit提交的話,git會提示:filename.txt needs merge

在發生衝突的時候,如果你使用git status命令,那麼會顯示出發生衝突的具體信息。

在你解決了衝突之後,你可以使用如下步驟來提交:

第一步(如果需要增加文件):
    git add file1

第二步:
    git commit

git恢復刪除了的文件

git pull 從git服務器取出,並且和本地修改merge, 類似於SVN up,但是對刪除的文件不管用,恢復刪除文件用
    git checkout -f
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章