本文整理了Ubuntu下git的一些常用操作命令清單,方便以后查閱。學習網站參考廖雪峰老師網站。
操作命令
創建倉庫,並提交一個readme文件。
sudo apt-get install git
mkdir mygit
cd mygit
git init
git config --global user.email "angiing.ooe@gmail.com"
git config --global user.name "zltingg"
vi readme.txt
git add readme.txt
git commit -m "wrote a readme file."
文件改動怎么辦
git status隨時掌握工作區的狀態,告訴你有文件被修改過
git diff查看文件修改內容
git log git log --pretty=oneline顯示從最近到最遠的提交日志
版本回退
git reset --hard commit_id允許我們在版本的歷史之間穿梭(commit后沒有推到遠程庫), HEAD指向的版本就是當前版本,HEAD^指向上一個版本
git reflog查看命令歷史,以便確定要回到未來的哪個版本
版本庫(Repository)
工作區有一個隱藏目錄.git,這個不算工作區,而是Git的版本庫。
Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD
git diff HEAD -- readme.txt命令可以查看工作區和版本庫里面最新版本的區別
撤銷修改
git checkout -- readme.txt丟棄工作區文件的修改
git reset HEAD readme.txt可以把暫存區的修改撤銷掉(unstage),重新放回工作區
刪除文件
rm test.txt刪除test文件
git rm test.txt刪除版本庫中的這個test文件
或者git checkout -- test.txt恢復誤刪
git checkout本質是用版本庫里的版本替換工作區的版本
遠程倉庫
- 在/home/zlt下面創建SSH Key:
ssh-keygen -t rsa -C "angiing.ooe@gmail.com",兩次回車后要求輸入密碼(至少5位),輸入兩次密碼后創建SSH Key完成。
在/home/zlt/.ssh中出現id_rsa和 id_rsa.pub文件即為創建成功。
-
在GitHub下添加SSH Key的公鑰,填上任意Title,在Key文本框里粘貼
id_rsa.pub文件的內容。如果有若干電腦,只要把每台電腦的Key都添加到GitHub,就可以在每台電腦上往GitHub推送了。
添加遠程庫
本地有一個倉庫,想要在GitHub上同步這個倉庫。
步驟:
- 新建一個倉庫,設置Repository name為mygit(與本地庫相同)
git remote add origin git@github.com:zltingg/mygit.git關聯遠程庫,遠程庫的名字就是origingit push -u origin master第一次推送master分支的所有內容
如果推送失敗,可以檢查一下github上settings-Emails的設置,把Keep my email address private取消勾選。
先創建遠程庫,再從遠程庫克隆。(常用)
在用戶主目錄下執行git clone git@github.com:zltingg/gitskills.git
分支管理
創建切換
查看分支:git branch
創建dev分支:git branch dev
切換到master分支:git checkout master
創建+切換到dev分支:git checkout -b dev
合並dev分支到當前master分支:git merge dev(fast forward看不到合並歷史)
git merge --no-ff -m "merge with no-ff" dev可以看到合並歷史
刪除dev分支:git branch -d dev
git branch -D dev強行刪除沒有被合並過的dev分支
沖突
-
本地兩個分支對同一文件作修改並提交,merge時產生沖突:
手動修改沖突文件,再提交,再刪除小分支,再push。
git log --graph --pretty=oneline --abbrev-commit查看分支合並的情況。
解決bug
git stash把當前工作現場存起來- 通過創建新的bug分支修復bug,然后合並,最后刪除
git stash list查看工作現場存到哪兒了git stash pop恢復現場並刪除stash內容
多人協同
- 首先,可以試圖用
git push origin <branch-name>推送自己的修改; - 如果推送失敗,則因為遠程分支比你的本地更新,需要先用
git pull試圖合並; - 如果合並有沖突,則解決沖突,並在本地提交;
- 沒有沖突或者解決掉沖突后,再用
git push origin <branch-name>推送就能成功!
如果
git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關系沒有創建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>。
查看遠程庫信息,使用git remote -v
在本地創建和遠程分支對應的分支,使用git checkout -b branch-name origin/branch-name,本地和遠程分支的名稱最好一致
rebase
git rebase把本地未push的分叉提交歷史整理成直線
標簽管理
創建標簽
發布一個版本時,我們通常先在版本庫中打一個標簽(tag):
git tag <tagname>用於新建一個標簽,默認為HEAD,也可以指定一個commit id
git tag -a <tagname> -m "blablabla..."可以指定標簽信息
git tag可以查看所有標簽
刪除標簽
- 命令
git push origin <tagname>可以推送一個本地標簽; - 命令
git push origin --tags可以推送全部未推送過的本地標簽; - 命令
git tag -d <tagname>可以刪除一個本地標簽; - 命令
git push origin :refs/tags/<tagname>可以刪除一個遠程標簽。
配置別名
git config --global alias.lg "log --graph --pretty=oneline --abbrev-commit"以后輸入git lg就可以查看commit歷史。
用戶主目錄下
vi .gitconfig可查看alias.的內容
忽略特殊文件
問題:把某些文件放到Git工作目錄中,但又不能提交它們,比如保存了數據庫密碼的配置文件。
解決方法:在Git工作區的根目錄下創建一個特殊的.gitignore文件,然后把要忽略的文件名填進去,Git就會自動忽略這些文件。
