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
查看該文件的differencegit 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