【Linux】git 常用命令

作者:LogM

本文原載於 https://segmentfault.com/u/logm/articles ,不允許轉載~

1. 克隆

git clone <版本庫的網址>
git clone <版本庫的網址> <本地目錄名>

# 克隆版本庫的時候,所使用的遠程主機自動被git命名爲origin
# 使用-o修改遠程主機名
git clone -o <遠程主機名> <版本庫的網址>

2. 查看歷史

# 查看歷史的每一次操作
git reflog

# 查看歷史commit 
git log
git log --oneline

# 查看commit的修改
git show <commit_id>
git show --stat <commit_id>
git show <commit_id> <filename>

# 查看兩個分支的差異
git diff <branch1> <branch2>
git diff --stat <branch1> <branch2>

# 查看某個文件的改動,還未add
git diff <filename>

# 查看已經add的文件相比上一次commit有哪些改動
git diff --cached

3. 遠程主機管理

# 列出所有的遠程主機名
git remote

# 參看遠程主機的網址
git remote -v

# 查看主機的詳細配置
git remote show <主機名>

# 添加遠程主機
git remote add <主機名> <網址>

# 刪除遠程主機
git remote rm <主機名>

# 遠程主機改名
git remote rename <原主機名> <新主機名>

4. 分支管理

# 將遠程主機新的更新取回本地,默認取回所有branch的更新
# 它取回的代碼對你本地的開發代碼沒有影響(只是讓 `git branch -a` 顯示出遠程新增的branch,不修改本地代碼)
git fetch <遠程主機名>

# 取回遠程主機的特定branch
git fetch <遠程主機名> <分支名>

# 查看遠程分支
git branch -r

# 查看所有分支
git branch -a

# 在origin/master的基礎上,新建本地分支
git checkout -b newBrach origin/master
# 相當於執行
git branch newBrach
git checkout newBrach

# 查看跟蹤關係
git branch -vv

# 手動建立追蹤關係
git branch --set-upstream-to=origin/remoteBranch localBranch

# 刪除本地分支
git branch -d <BranchName>

5. 拉回更新

# 取回遠程主機某個分支的更新,再與本地的指定分支合併
# 實質上,這等同於先做git fetch,再做git merge
git pull <遠程主機名> <遠程分支名>:<本地分支名>

# 採用rebase模式,可以使用--rebase選項
git pull --rebase <遠程主機名> <遠程分支名>:<本地分支名>

# 如果遠程分支是與當前分支合併,則冒號後面的部分可以省略
git pull <遠程主機名> <遠程分支名>

# 如果本地的當前分支在遠程主機上已經有追蹤關係的分支,可以省略分支名
git pull <遠程主機名>

# 如果只有一個追蹤的分支,則可以省略主機名
git pull

# 如果遠程主機刪除了某個分支,默認情況下,git pull 不會在拉取遠程分支的時候,刪除對應的本地分支
# 加上參數 -p 就會在本地刪除遠程已經刪除的分支
git pull -p
# 等同於
git fetch --prune origin 
git fetch -p

6. 推送更新

# 將本地分支的更新,推送到遠程主機
git push <遠程主機名> <本地分支名>:<遠程分支名>

# 如果省略遠程分支名,則表示將本地分支推送與之存在"追蹤關係"的遠程分支,如果該遠程分支不存在,則會被新建
git push origin master

# 如果省略本地分支名,則表示刪除指定的遠程分支,因爲這等同於推送一個空的本地分支到遠程分支
git push origin :master
# 等同於
git push origin --delete master

# 如果當前分支與遠程分支之間存在追蹤關係,則本地分支和遠程分支都可以省略
git push origin

# 如果當前分支只有一個追蹤分支,那麼主機名都可以省略
git push

# 還有一種情況,就是不管是否存在對應的遠程分支,將本地的所有分支都推送到遠程主機,這時需要使用--all選項
git push --all origin

# 如果遠程主機的版本比本地版本更新,推送時Git會報錯,應當先pull合併代碼。如果你一定要推送,可以使用--force選項
git push --force origin 

# git push不會推送標籤(tag),除非使用--tags選項
git push origin --tags

7. 代碼回滾



# 文件被修改了,但未執行git add操作
git checkout fileName

# 同時對多個文件執行了git add操作,但本次只想提交其中一部分文件
# 取消暫存
git reset HEAD <filename>

# 文件執行了git add操作,但想撤銷對其的修改
# 取消暫存
git reset HEAD fileName
# 撤銷修改
git checkout fileName

# 修改的文件已被git commit,但想再次修改不再產生新的Commit
# 修改最後一次提交 
$ git add fileName
$ git commit --amend -m"說明"

# 已在本地進行了多次git commit操作,現在想撤銷到其中某次Commit
git reset [--hard|soft|mixed|merge|keep] [commit|HEAD]
# hard:重設index和working directory,從<commit>以來在working directory中的任何改變都被丟棄,並把HEAD指向<commit>
# soft:index和working directory中的內容不作任何改變,僅僅把HEAD指向<commit>。自從<commit>以來的所有改變都會顯示在git status的“Changes to be committed”中
# mixed:僅重設index,但是不重設working directory。這個模式是默認模式,即當不顯示告知git reset模式時,會使用mixed模式。這個模式的效果是,working directory中文件的修改都會被保留,不會丟棄,但是也不會被標記成“Changes to be committed”,但是會打出什麼還未被更新的報告

# 將本地的狀態回退到和遠程一樣
git reset --hard origin/devlop

# revert是放棄指定提交的修改,但是會生成一次新的提交,需要填寫提交註釋,以前的歷史記錄都在;
# reset是指將HEAD指針指到指定提交,歷史記錄中不會出現放棄的提交記錄。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章