git常用命令

Unix的哲學是“沒有消息就是好消息”##


參考:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/


git常用命令###

  • git init
    初始化一個Git倉庫

  • git add <file>
    添加文件到Git倉庫,可反復多次使用,添加多個文件

  • git commit -m "first commit"
    提交文件,-m后是本次提交的說明,最好是有意義的。

  • git status
    查看倉庫當前的狀態。

  • git diff readme.txt
    查看該文件的difference

  • git log 顯示從最近到最遠的提交日志(查看提交歷史)

  • git log --pretty=oneline 增加參數簡略顯示log信息。
    其中git的commit id是一個SHA1計算出來的一個大數字,十六進制表示。

在Git中,用HEAD表示當前版本,也就是最新的提交,上一個版本就是HEAD,上上一個版本就是HEAD,當然往上100個版本寫100個比較容易數不過來,所以寫成HEAD~100。

  • git reset 回退到上一個版本 git reset --hard HEAD^

  • git reset --hard 3628164 指定回到未來的某個版本,后面的數字是版本的commit id的前幾位。

  • cat readme.txt 查看該文件的內容。

  • git reflog (查看命令歷史)查看記錄了的每一條命令,可用于查看已經回退掉的某次提交的commit id。

Git中分為工作區,版本庫。版本庫中包括暫存區和默認創建的分支master。其中add命令是將要提交的所有修改放到暫存區(Stage),然后執行git commit就可以一次性把暫存區的所有修改修改提交到分支。

  • git checkout -- readme.txt 把該文件在工作區的修改全部撤銷。就是讓該文件回到最近一次git commit 或 git add 時的狀態。

  • git reset HEAD file 可以把暫存區的修改撤銷掉(unstage)。然后再用git checkout 這樣就可以把修改都改回來了。

  • git rm test.txt 然后git commit 從版本庫中刪除test文件。

  • git rm -r -n --cached */bin/* --刪除根文件夾,只要把上面的bin改為gen即可。

  • git remote add origin git@github.com:weizhinianer/mygitrepository.git 將本地倉庫和github倉庫關聯。

  • git push 把當前分支master推送到遠程。

  • git push -u origin master 第一次推

  • git push origin master

  • git push origin dev 可以選擇特定的分支進行推送。

  • git clone git@github.com:weizhinianer/gitskills.git
    將github上的倉庫clone到當前本地的地址中(注意命令要在該地址中運行)

你也許還注意到,GitHub給出的地址不止一個,還可以用https://github.com/michaelliao/gitskills.git這樣的地址。實際上,Git支持多種協議,默認的git://使用ssh,但也可以使用https等其他協議,不過通過ssh支持的原生協議速度最快。
使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內部就無法使用ssh協議而只能用https。

git checkout -b dev

創建dev分支,然后切換到dev分支,相當于一下兩條命令

git branch dev        創建dev分支
git checkout dev    切換到dev分支
  • git branch 查看分支列表

  • git merge dev 合并某分支(dev)到當前分支

  • git branch -d dev 刪除分支(dev),分支用完后記得刪除

  • git branch -D dev 大寫D,可以強制刪除沒有合并但已廢棄的分支

  • git log --graph --pretty=oneline --abbrev-commit 查看分支的合并情況

  • git merge --no-ff -m "merge with no-ff" dev
    合并dev分支,參數 --no-ff 表示禁用Fast forward,由于本次合并要創建一個新的commit,所以加上 -m參數。

  • git stash 用于暫存當前工作現場,便于隨時切換到其他分支

  • git stash list 查看當前分支下的暫存工作現場(可以有多個)

  • git stash apply stash@{0} 恢復stash@{0}的工作現場,但并不刪除stash內容,需要使用git - stash drop來刪除。

  • git stash pop,恢復的同事把stash內容也刪了。

  • git remote 查看遠程庫的信息

  • git remote -v 顯示更詳細的信息

  • git pull 拉取最新的提交。
    沒有指定本地dev分支與遠程origin/dev分支的鏈接,可能會失敗。
    先:
    git branch --set-upstream dev origin/dev
    然后:
    git pull.

    因此,多人協作的工作模式通常是這樣:
    首先,可以試圖用git push origin branch-name推送自己的修改;
    如果推送失敗,則因為遠程分支比你的本地更新,需要先用git pull試圖合并;
    如果合并有沖突,則解決沖突,并在本地提交;
    沒有沖突或者解決掉沖突后,再用git push origin branch-name推送就能成功!
    如果git pull提示“no tracking information”,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream branch-name origin/branch-name。
    這就是多人協作的工作模式,一旦熟悉了,就非常簡單。

  • git tag v1.0 6224937 新建一個標簽,默認為HEAD,也可以指定一個commit id。

  • git tag 查看所有標簽

  • git show v1.0 查看標簽信息

  • git tag -a v1.0 -m "version 1.0 released" 3628164 其中-a指定標簽名,-m指定說明文字。

  • git tag -d v1.0 刪除標簽

  • git push origin v1.0 推送特定標簽到遠程

  • git push origin --tags 推送所有本地標簽到遠程

如果標簽已經推送到遠程了,那刪除標簽就得先在本地刪除,然后再遠程

git tag -d v1.0
git push origin :refs/tags/v1.0 

當本地commit一個提交和遠端服務器中的代碼有沖突(別人也改了相同的文件)時可以在pull 中加 –rebase。git pull --rebase

  • 另一哥們將分支push到庫中,我怎么獲取到他的分支信息呢?
    如果安裝了git客戶端,直接選擇fetch一下,就可以獲取到了。
    如果用命令行,運行 git fetch,可以將遠程分支信息獲取到本地,再運行 git checkout -b local-branchname origin/remote_branchname 就可以將遠程分支映射到本地命名為local-branchname 的一分支。

.gitignore 文件的用途,該文件只能作用于 Untracked Files,也就是那些從來沒有被 Git 記錄過的文件(自添加以后,從未 add 及 commit 過的文件)。

客戶端相關配置##

[root@svn test]# git config --global user.name "zhouyanhang"

[root@svn test]# git config --global user.email zhouyanhang@letv.com

[root@svn ~]# git config core.editor vim

[root@svn ~]# git config core.paper “less –N”

[root@svn ~]# git config color.diff true

  • git config --global alias.st status 使用別名
  • git config --global alias.last 'log -1'

git中patch的處理:##

多個commit如果想打成一個patch:

1.創建新分支,并使用git reset --hard 到之前的需要打patch的那個點

2.使用git merge master --squash 合并剛才的分支。使用--squash可以不保存原來的commit歷史,成為了一個新的commit。

3.commit之后使用git format-patch HEAD^ 制作補丁。

這里也可以用git format-patch <old_sha>...<new_sha> -o <patch_dir> 參數的形式

以上是生成一個補丁,當然單個的commit可以直接制作補丁。

4.將生成的patch文件copy到目標git目錄下。

5.使用git apply --stat 0001-minor-fix.patch檢查patch文件,使用git apply --check 0001-minor-fix.patch查看是否能夠使用成功。

6.使用git am -s < 0001-minor-fix.patch應用該補丁,但是有沖突的部分就會失敗,這時可以使用patch -p1 < 0001-minor-fix.patch 來強制合并,這時有沖突的文件會生成臨時文件,最好的方式是使用文件對比工具修改,然后把多余的文件刪除。

7.注意打patch的時候,圖片等資源似乎打不進去。。。。如果缺少,最好自己手動加一下。

至此,基本就完成了patch的工作。


  • 查看機器ssh的公鑰和私鑰

      cat ~/.ssh/id_rsa.pub
    
      cat ~/.ssh/id_rsa
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 初始化配置 #配置使用git倉庫的人員姓名 git config --global user.name "Your...
    賤精先玍丶閱讀 355評論 0 0
  • 分布式版本管理工具 git屬于分布式 svn集中式 git安裝 git初始化一個倉庫 其實就是創建了一個.git隱...
    SnowDragonYY閱讀 1,514評論 0 0
  • 一、 Git 命令初識 在正式介紹Git命令之前,先介紹一下Git 的基本命令和操作,對Git命令有一個總體的認識...
    子瘋zp閱讀 69,975評論 1 18
  • 最近有一個項目需要用到kafka分布式訂閱發布消息系統,于是抽空的時候學習了一下關于kafka的一些事,同樣在這里...
    七號蘿卜閱讀 6,563評論 2 2
  • 房間里蚊子特別多,睡得很不安穩,身上已經沒有地方不癢的了,天也快亮了,索性起床吧。看了看剛出生的兒子,還沒有...
    黑夜中的貓閱讀 175評論 0 0