一些有用的git命令清單


以下是一些我常用的git命令清單

如果以下的命令不清晰細節,請看git的文檔。

設置個人信息

git config --global user.name "John Doe"
git config --global user.email "john@example.com"

使用 --global 那么以上的設置會在所有git工程中生效. 如果 git config 沒有使用 --global 參數並且運行在當前工程目錄下, 那么以上設置只會對當前工程生效。

讓Git忽略文件權限

cd project/
git config core.filemode false

這個選項是讓我們忽略文件權限,也就是文件權限對我們不重要的時候,比如在windows系統下就常用

查看Git的當前配置清單

git config --list

初始化一個git倉庫本地

cd existing-project/
git init

把遠程倉庫克隆到本地

git clone https://github.com/user/repository.git

這個會在本地新創建一個目錄(以遠程倉庫的名稱命名)


查看某個git子命令的幫助文檔

git help clone

Update and merge your current branch with a remote 把遠程的特定分支更新到本地當前的分支,並與本地分支合並

cd repository/
git pull [remote_repo_name] [remote_branch_name]

如果你不想合並,那么就使用git fetch,不要用pull

查看遠程倉庫的URL

git remote -v

更改遠程倉庫的URL

git remote set-url [remote_repo_name] http//github.com/repo.git

添加個遠程倉庫

git remote add [remote_repo_name] https://github.com/user/repo.git

查看本地文件(沒有添加到暫存區的文件)的變化

git diff

Note that this does not track new files.

查看本地文件(添加到了暫存區但沒有commit的文件)的變化

git diff --cached

查看本地文件相對於遠程倉庫特定分支的變化

git diff [local_repo_name]/[local_branch_name]

比較兩個commit之間的變化

git diff COMMIT1_ID COMMIT2_ID

比較兩個commit之間的變化(僅僅只會列出變化的文件名)

git diff --name-only COMMIT1_ID COMMIT2_ID

查看一個特定commit的文件變化

git diff-tree --no-commit-id --name-only -r COMMIT_ID

or

git show --pretty="format:" --name-only COMMIT_ID

source: http://stackoverflow.com/a/424142/1391963

查看push之前的變化(暫存區與本地倉庫分支的比較)

git diff --cached [repo_name]/[branch_name]

查看一個特定commit的詳情(文本變化,提交信息)

git show COMMIT_ID

查看當前工作目錄的git狀態

git status

普通的更改文件,提交文件

git add changed_file.txt
git add folder-with-changed-files/
git commit -m "Commiting changes"

重命名或移動,刪除文件,提交修改

git rm removeme.txt tmp/crap.txt
git mv file_oldname.txt file_newname.txt
git commit -m "deleting 2 files, renaming 1"

修改最后一個提交的信息(如果最后一個提交的信息有必要修改更正的話)

git commit --amend -m "New commit message"

把本地的commits 推送到遠程倉庫的特定分支

git push [repo_name] [branch_name]

查看最近提交的歷史日志

git log

查看最近2個commits的歷史日志

git log -2

查看最近2個commits的歷史,並進行比較(diff)

git log -p -2

查看最近提交的歷史日志,以單行的形式顯示

git log --pretty=oneline

恢復到一個特定的commit,並提交

git revert [commit_id]
git push origin master

恢復到一個特定的commit的狀態

# reset the index to the desired tree
git reset 56e05fced

# move the branch pointer back to the previous HEAD
git reset --soft HEAD@{1}

git commit -m "Revert to 56e05fced"

# Update working copy to reflect the new commit
git reset --hard [commit_id]

Source: http://stackoverflow.com/q/1895059/1391963

撤銷上一個提交,並保留本地變化

git reset --soft HEAD~1

撤銷上一個提交,不保留本地變化

git reset --hard HEAD~1

撤銷上一個提交,在索引中保留本地變化

git reset --mixed HEAD~1

Or git reset HEAD~1
See also http://stackoverflow.com/q/927358/1391963

撤銷本地沒有push的commits

git reset [repo_name]/[branch_name]

把本地的狀態重置為遠程的一個特定狀態

git fetch [repo_name]
git reset --hard [repo_name]/[branch_name]

查看本地的分支

git branch

查看所有的分支

git branch -a

創建一個標簽

git tag 7.x-1.3

推送一個標簽

git push [repo_name] 7.x-1.3

創建一個分支

git checkout master
git branch new-branch-name

創建一個分支並切換到新分支

git checkout -b new-branch-name

從當前分支的上一個提交創建一個分支(或者說,新分支的base,是當前分支的上一個提交)

git branch branchname 

or

git branch branchname HEAD~1       //這里的HEAD~1可以改成特定的commit_id

or

git checkout -b branchname 

Source: http://stackoverflow.com/a/2816728/1391963

切換到新分支

git checkout new-branch-name

合並分支

git checkout master
git merge branch-name

把branch-name中的所有commit合並到master分支

把branch-name的分支合並到當前分支,並且不合並commits

git merge branch-name --no-commit --no-ff

查看當前分支與其他分支的不同

git diff branch-name

查看當前分支某個特定文件與其他分支的不同

git diff branch-name path/to/file

刪除一個分支

git branch -d new-branch-name

把本地新分支推送到遠程倉庫

git push [repo_name] new-branch-name

得到遠程所有分支

git fetch origin

得到git的根目錄

git rev-parse --show-toplevel

Source: http://stackoverflow.com/q/957928/1391963

從倉庫中刪除所有本地已刪除的文件

git rm $(git ls-files --deleted)

Source: http://stackoverflow.com/a/5147119/1391963

刪除所有沒進入暫存區的文件

git clean -f

包含目錄:

git clean -f -d

防止意外發生:

git clean -n -f -d

Source: http://stackoverflow.com/q/61212/1391963


撤消某個git add的文件:

git reset HEAD file.txt

用git rebase來合並分支:

比如我有一個本地的分支已經推送到了遠程分支,都叫new-ui。  該分支是為了完成新的UI功能,當new-ui分支測試完畢了,需要合並到主分支master,因為想保留new-ui分支上的所有commit歷史信息,不能采用git merge命令,先要把

整個new-ui的分支變基到master分支上來 ,先切換到new-ui分支,然后調用git rebase master這個命令,結果就是這樣整條new-ui提交鏈條就掛到master頭節點的后面了,  變成了 :

  ----+---------+-----------+------------+

       |                                              |

   master                                 new-ui

 

然后git會自動合並,沖突的部分會提示,與傳統的git merge沒有任何區別,然后修改沖突文件,修改完畢后保存,然后git add去除沖突的文件,此時無任何沖突了,可以繼續嘗試rebase了,git rebase --continue 。注意,

如果沒有沖突,直接完整合並,那么是不用git rebase --continue的。這時候可以用git merge合並兩個分支了,先切換到master分支上,然后調用git merge new-ui,結果這時候才會正式把new-ui的代碼合並到master分支上,工作流圖變成了以下:

                                                 master

                                                   |

----+---------+-----------+------------+

                                                   |

                                                 new-ui

master指針已經指到尾部了,可以刪除本地的new-ui分支了,git branch -d new-ui

最后刪除遠程new-ui分支:

先查看遠程分支  git branch  -r

然后根據遠程分支的名稱刪除遠程分支: 

git branch -r -d [remote_repo_name]/new-ui

git push origin :new-ui



用git 遠程倉庫之間的備份:

比如你在github上有一個多次commit的repo,你需要把這個遠程倉庫的所有歷史commit log等版本信息全部備份到公司內網的repo。

需要做以下步驟

git clone [github_repo_url]

然后cd到clone下來的倉庫目錄下

然后運行 git push --mirror [internal_netwrok_repo_url]

 


免責聲明!

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



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