我的github:https://github.com/shihunguilai/learngit
1.安裝git
sudo apt install git
2.git的設置
git config --global user.name "your name"
git config --global user.email "your email"
git config core.ignorecase false #git 使其對文件名大小寫敏感
git config --list
3.在本地建立倉庫
mkdir learngit
cd learngit
git init
touch readme.txt #建立測試文件
vim readme.txt #輸入測試內容
把文件加入倉庫
git add readme.txt
把文件提交到倉庫
git commit -m "sth."
修改readme.txt
vim readme.txt
查看倉庫當前的狀態(tài)
git status
查看文件的修改內容
git diff readme.txt
提交修改
git commit -m "sth."
顯示提交的歷史記錄
git log
git log --pretty=oneline #一行顯示
4.git版本重置、回退
版本回退
head表示當前版本
head^表示上一個版本
head^^表示上兩個版本
head~100表示當前往上100個版本
用git log查看提交歷史,以便會退到某個版本
用git reflog查看命令歷史,可以回到未來的哪個版本
重置到某一個版本
git reset --hard commit_id
- 查看工作區(qū)和版本庫里最新版的區(qū)別:
git diff HEAD -- readme.txt
管理修改
- git管理的是修改,不是文件
- git add file #把工作區(qū)文件修改提交到暫存區(qū)stage
- git commit -m 'commit desc word' #把暫存區(qū)修改提交到分支上
撤銷修改
修改了工作區(qū)的文件內容,沒有添加到暫存區(qū),想直接丟掉修改
git checkout -- filename
修改了工作區(qū)的文件內容,并且添加到了 暫存區(qū),想丟掉修改,要2步
- git reset head file #撤掉暫存區(qū)修改到工作區(qū)
- git checkout -- file #撤掉工作去修改
刪除文件
在工作去新建test.txt文件
touch test.txt
git add .
git commit -m "sth."
要刪除版本庫中的文件
git rm/add test.txt
git commit -m "remove sth."
刪錯了,因為版本庫還有,可以吧誤刪的文件到最新版
git checkout -- test.txt
git checkout其實是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除,都可以“一鍵還原”
5.遠程倉庫
創(chuàng)建ssh key
ssh-keygen -t rsa -C "your email@xx.com"把 ~/.ssh/id_rsa.puh 文件的內容 添加到 github 上面的 add ssh key
測試是否 添加成功
ssh -T git@github.com在github上建立learngit倉庫
6.關聯(lián)本地倉庫
git remote add origin git@github.com:shihunguilai/learngit.git
git remote set-url origin git@github.com:shihunguilai/learngit.git
git pull origin master
git push origin master
7.分支管理
- 查看分支
git branch - 創(chuàng)建分支
git branch dev - 切換分支
git checkout dev - 創(chuàng)建并且切換分支
git checkout -b dev - 刪除分支
git branch -d dev - 合并分支并且生成一個提交
git merge dev --no-ff -m 'sth.' - bug分支
-
git stash隱藏當前修改,使工作區(qū)干凈 -
git stash list查看所有被隱藏的現(xiàn)場 - 恢復現(xiàn)場但是不銷毀stash
git stash apply - 刪除stash
git stash drop - 恢復并且刪除現(xiàn)場
git stash pop - 保存有多個現(xiàn)場場,恢復
git stash apply stash@{0}
-
- 刪除一個沒有被合并的分支
git branch -D brname - 創(chuàng)建遠程分支
git push origin dev:dev把本地的遠程分支創(chuàng)建到遠程 - 刪除遠程分支
git push origin :dev - 建立本地分支和遠程分支的關聯(lián)
git branch --set-upstream-to=origin/<branch> dev - 查看遠程庫信息,使用git remote -v;
- 基于遠程跟蹤分支創(chuàng)建本地分支
git checkout --track -b refactored origin/refactored, --track 在新版git中可以省略 - 查看本地2個分支的區(qū)別
git diff branch1 branch2
8.創(chuàng)建git別名
- git config --global alias.st status
- git config --global alias.co checkout
- git config --global alias.ci commit
- git config --global alias.br branch
- git config --global alias.unstage 'reset HEAD'
- git config --global alias.last 'log -1'
- git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
9.git標簽
- 創(chuàng)建標簽
- 新建一個標簽,默認為HEAD
git tag v1.0,也可以是一個commit——id - 查看所有標簽 git tag
- 查看tag信息:git show v1.0
- git tag -a <tagname> -m "描述信息..."可以指定標簽信息;
- 操作標簽
- 刪除本地的tag git tag -d tagname
- 推送一個本地標簽到遠程
git push origin <tagname> - 推送所有tag到遠程
git push origin --tags - 刪除一個遠程標 簽
git push origin :refs/tags/<tagname>
10.git fetch /git merge
不要用git pull,用git fetch和git merge代替它
- 從遠端的源倉庫更新到本地的代碼倉庫
git fetch origin - 看看本地分支和遠程分支的差異
git diff master origin/master - 合并到本地分支
git checkout master ; git merge origin/master