git常見場景命令使用

1、我想查看某次提交修改了哪些內容,就像使用diff一樣詳細的列出來。

        git  show  提交的commit ID     

        例如:  git show 9897e8f  (不知道commit id ,可以先使用git log查看得到,一長串數字便是)

   有可能我只想看這次提交的某個文件修改的具體內容,

       git  show  提交的commit ID  -- 文件名

       例如: git show 9897e8f   --  /home/dijiang/hello.cxx  (文件名要帶路徑)

2、將某個文件的歷史修改內容都顯示出來:

git  log  -p   文件名

例如:git log -p  ./hello.cxx

3、現已知有一個遠程庫http:172.29.0.1/hello.git ,如何在本地創建一個分支並且跟蹤遠程庫中的某個版本呢?

分爲5步:

(1)找一個乾淨的目錄(或者新建一個),比如叫learn。進入到該目錄:cd learn

(2)克隆該遠程庫:git clone http:172.29.0.1/hello.git

(3)克隆完此時learn目錄下應該生成一個hello目錄(和項目名一致),繼續進入該子目錄:cd hello

(4)列出遠程庫所有的分支(查看你想跟蹤的那個分支):git branch -a     (一般叫remote/origin/api等等)

(5)創建本地分支並和遠程的分支關聯:git checkout -b dijiang  origin/api    (-b 參數不能少,dijiang就是我現在的本地的分支名,origin/api就是我要跟蹤的遠程庫中的某個分支名,就上一步git branch -a 列出的去除remote字符串。)

這時git status查看當前狀態,便會發現位於分支dijiang, 與上游分支origin/api一致

4、本地版本比遠程庫的版本要新,此時要想本地庫和遠程版本庫一致,如果使用git pull 並不能使本地版本和遠程版本一致,使用git status 查看還是領先遠程版本好多次提交。

    要到達一致目的,需要使用如下命令:

       git reset --hard origin/master    (master爲遠程分支,替換成你要想一致的遠程分支)

5、由於某些錯誤操作導致本地分支不再和某個遠程分支相關聯,git status 不再提示與上游分支origin/XXX一致,該如何修復呢?

(1)首先切換到本地分支dijiang:git checkout dijiang

(2)git  branch --set-upstream-to=origin/api  便將本地dijiang分支和遠程api分支關聯起來啦。(前提是已經關聯過遠程分支:git remote add http:172.29.0.1/hello.git。不行就先刪了遠程庫:git remote remove origin,然後再關聯)

6、push 命令詳解

git push命令用於將本地分支的更新,推送到遠程主機。

$ git push <遠程主機名> <本地分支名>:<遠程分支名>git push <遠程主機名> <本地分支名>:<遠程分支名>

注意,分支推送順序的寫法是<來源地>:<目的地>,所以git pull是<遠程分支>:<本地分支>,而git push是<本地分支>:<遠程分支>。

如果省略遠程分支名,則表示將本地分支推送與之存在”追蹤關係”的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建。

$ git push origin dijiang:master

上面命令表示,將本地的dijiang分支推送到origin主機的master分支。如果後者不存在,則會被新建。

7、版本回退:

git   reset  --hard  commit_id(提交的ID)

便可以會退到某次提交的版本

8、更改遠程庫的地址:

(1)查看遠程庫的地址:gitremote  –v

 origin http://171.22.32.11/hello.git(fetch)

 origin http://171.22.32.11/hello.git(push)

(2)刪除與已經存在的遠程庫的關聯

  git remote rm origin

(3)新增遠程的地址

  gitremote add origin http://122.122.12.11/hello.git

再次查看便成功了。

 

9、git合併衝突

打開衝突文件

<<<<<<<<<與======之間的是我修改的。而===========與>>>>>>>>>>>>>之間是別人修改的。

將內容修改後,並且刪掉<<<<<<等這些標誌後重新提交就解決簡單的衝突了。

10、將暫存區文件退回到工作區:

git reset -- files 用來撤銷最後一次的git add files(因爲每git add file一次,暫存區的文件都會被更改一次)

ps: git checkout -- files 把文件從暫存區域複製到工作目錄,用來丟棄本地修改

      git checkout .  (這是一個點) 本地所有修改的,沒有的提交的,都返回到原來的狀態(丟棄掉所有的未提交的修改)

11、git diff詳解:

git diff 是對比出尚未git add文件的差異,該命令可以後面加個路徑,只對比出某個文件的差異。

如果已經git add的文件如何進行對比呢?使用選項 --cached,例如git diff --cached ./test.cpp 。改命令只顯示出已經git add部分的差異,而後續對test.cpp的修改部分如果沒有git add則不顯示。

如果只要沒有git commit的文件不管有沒有git add都對比出差異,則使用HEAD選項,例如git diff HEAD ./test.cpp 。對比出test.cpp自從上次提交後的所有修改。

12、刪除某一個配置項:

比如先前設置了 git config --global core.whitespace cr-at-eol 這個忽略換行符的命令,後來發現這樣至少掩耳盜鈴,反而不好發現有問題的行,於是想將該配置刪除。只要在設置的命令加個--unset選項即可,例如git config --global --unset core.whitespace cr-at-eol

13、設置代理

由於萬惡的防火牆導致有時候從github上clone項目異常緩慢,甚至失敗。我們可以給git設置代理從而正常克隆github上的項目。

設置代理的命令如下:

//設置代理
git config --global http.proxy 'socks5://127.0.0.1:1080'    //換成自己的有效的代理
git config --global https.proxy 'socks5://127.0.0.1:1080'

//取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

14、刪除所有未追蹤(git add)的文件

有時候一不小心誤操作,產生很多不需要的文件,如果在很多不同的目錄一個一個手動刪除很麻煩,使用以下命令即可刪除:

git clean -xdf

如果既想要刪除未追蹤的文件也想還原修改的,參照上面第10條介紹的和本條介紹的組合下就好啦:

git checkout . && git clean -xdf

15、使用git 打補丁:

先回顧下git diff 高級用法:

  1. git diff commitId filepath  當前與某一次提交進行比較,filepath可選(有就比較一個文件,沒有就比較所有的文件)
  2. git diff commitID1 commitID2 兩次 commit 提交間文件對比

使用git diff 生成patch文件:

    git diff > test.patch

將patch 應用到某個分支上

    git apply --whitespace=fix test.patch

此時git diff的修改就全部應用到文件上了,可自行git status查看。

apply patch前可先使用check 檢查下是否可以apply:git apply --check test.patch。

如果不小心apply產生錯亂啥的想還原,上面14條來救場。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章