前言
博主github
博主個人博客http://blog.healerjean.com
1、開發常備
1.0、本地直接創建倉庫
git init / git init --bare <倉庫名>
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/HealerJean123/fas.git
git push origin master
1.1、創建分支
當我們初次創建項目點的時候,是沒有分支的,我們需要先創建一個master分支出來,並且push到git上,這樣纔是真正創建了一個分支,否則,如果直接創建的兩個不同的分支,將會沒有同一個祖先,不能夠進行合併
git checkout -b zhangyj
1.2、查看分支
git branch
1.3、切換分支
git checkout zhangyj
1.4、提交全部更改到本地
git status
git add –A
git commit -m"add index.html"
1.5、從遠程分支拉取代碼
git pull origin develop
develop爲遠程分支的名字
- 拉取某個分支到本地
git clone -b develop http://git.github.com/healerjean/test.git
1.6、推送到自己的遠程分支
不可以跨分支push 代碼,比如現在是zhangyj分支,直接push develop是不會起作用的,我們需要網頁發起請求(當我們沒有權限操作master的時候),或者切換到其他分支,然後進行merge操作,如下
git push origin zhangyj
- 強制上傳,一般不要使用,一般用在–hard回退版本之後的上傳
git –f push origin
1.7、合併到develop分支
1.7.1、git網址操作
- 打開git網址
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-pLQFMFbO-1572840941459)(https://raw.githubusercontent.com/HealerJean/HealerJean.github.io/master/blogImages/1572835086522.png)]
- 因爲我們是使用的develop分支,默認提交的分支是master,所以這裏要進行改變
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-bXg4A3hl-1572840941460)(https://raw.githubusercontent.com/HealerJean/HealerJean.github.io/master/blogImages/1572835099908.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-isDahq4a-1572840941461)(https://raw.githubusercontent.com/HealerJean/HealerJean.github.io/master/blogImages/1572835104945.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-WTQeLjLa-1572840941461)(https://raw.githubusercontent.com/HealerJean/HealerJean.github.io/master/blogImages/1572835158526.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Ed9Wyc0p-1572840941462)(https://raw.githubusercontent.com/HealerJean/HealerJean.github.io/master/blogImages/1572835164711.png)]
1.7.2、merge合併
- develop合併到zhangyj
git merge develop
或者
git merge develop zhangyj
介紹 :marge和 rebase
marge 特點:自動創建一個新的commit,當合並時遇到衝突,修改後重新commit即可
優點:將commit的實際情況進行記錄,便於以後查看
缺點:由於每次merge會自動產生一個merge commit,所以在使用一些git 的GUI tools,如果commit頻繁,這樣會使得feature分支很雜亂,如果系統功能比較簡單,這時可以考慮使用rebase來進行合併處理。
rebase 特點:將commit歷史進行合併
優點:項目歷史比較簡單,少了merge commit
缺點:當發生衝突時不容易定位問題,因爲re-write了history
https://blog.csdn.net/liuxiaoheng1992/article/details/79108233
https://blog.csdn.net/happyjume/article/details/87450696
2、必要命令
2.1、刪除分支
2.1.1、刪除本地分支
git branch -D zhangzyj
2.1.2、刪除遠程分支
git push origin –delete zhangzyj
2.2、回退版本 --mix --hard --soft
2.2.1、基本解釋
2.2.1.1、基本概念
git reset 將當前分支的HEAD指向給定的版本,並根據模式的不同決定是否修改index和working tree。
- HEAD: HEAD就是指向當前分支當前版本的遊標
- Index: Index即爲暫存區,當你修改了你的git倉庫裏的一個文件時,這些變化一開始是unstaged狀態,爲了提交這些修改,你需要使用git add把它加入到index,使它成爲staged狀態。當你提交一個commit時,index裏面的修改被提交。
- working tree: 即當前的工作目錄。
2.2.1.1、git reset [] [] 常用的有三種模式
常用的有三種模式,–soft, --mixed, --hard,如果沒有給出則默認是–mixed
1、 --mixed
mixed修改了index,index中給定commit之後的修改被unstaged。如果現在執行git commit 將不會發生任何事,因爲暫存區中沒有修改,在提交之前需要再次執行git add
2、–soft
使用--soft
參數將會僅僅重置HEAD
到制定的版本,不會修改index和working tree,本地文件的內容並沒有發生變化,而index中仍然有最近一次提交的修改,這時執行git status會顯示這些修改已經在再暫存區中了,無需再一次執行git add
3、–hard
使用--hard
同時也會修改working tree,也就是當前的工作目錄,那麼最後一次提交的修改,包括本地文件的修改都會被清楚,徹底還原到上一次提交的狀態且無法找回。所以在執行reset --hard
之前一定要小心
2.2.2、練習
2.2.2.1.、回退某個文件到指定版本
git reset fcd2093 a.jsp
2.2.2.2、將本地的狀態回退到和遠程的一樣
git reset –hard origin/master (也可以是develop分支)
2.2.2.3、回退到某個版本
git reset 057d
2.2.2.4、真實使用
有時候,如果我們上傳的文件太大,失敗了,但是又已經commit了,很難受,又不能撤回,有時候又不知道到底是哪個文件太大了。所以需要了撤回到上次commit的狀態。也就是說本地的修改可以通過git status顯示出來
git log 查看comit 的id
git reset fadsfadsfadsf123 (你運行gitcommit 之前的那個最新commit ID)
git status 就可以看到我們本地剛剛做的修改了哦 哈哈哈,這個纔是真正牛逼的東西
2.3、查看日誌
2.3.1、查看整個日誌記錄
2.3.1.1、git log
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-LoWLyzqj-1572840941464)(https://raw.githubusercontent.com/HealerJean/HealerJean.github.io/master/blogImages/1572837363209.png)]
2.3.1.2、git reflog
D:\workspace\scf-resurgence>git reflog
54c65741 (HEAD -> 20191016-1.0.1-SNAPSHOT) HEAD@{0}: rebase finished: returning to refs/heads/20191016-1.0.1-SNAPSHOT
54c65741 (HEAD -> 20191016-1.0.1-SNAPSHOT) HEAD@{1}: rebase: 信貸核心參數修改
38024757 HEAD@{2}: rebase: 信貸核心參數修改
387f8163 HEAD@{3}: rebase: dev環境配置
d0125a78 HEAD@{4}: rebase: 衝突修改
77107232 HEAD@{5}: rebase: 信貸核心字段修改
6c2ca94f HEAD@{6}: rebase: 年利率改爲利率+利率類型
caebb6b9 HEAD@{7}: rebase: 信貸核心參數調整
8139dd8d HEAD@{8}: rebase: 日誌補充
2.4、查看某個版本的歷史
- fileName相關的commit記錄
git log filename
- 顯示filename每次提交的diff
git log -p filename
- 只看某次提交中的某個文件變化,可以直接加上fileName
git show commit-id filename
2.4、徹底清除Git記錄
2.4.1、清除某個文件的所有歷史記錄
第一步
$ git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch path-to-your-remove-file' --prune-empty --tag-name-filter cat -- --all
1、 path-to-your-remove-file 就是你要刪除的文件的路徑 如果不加/,則默認是相對路徑 ,
2、如果你要刪除的目標不是文件,而是文件夾,那麼請在 `git rm --cached' 命令後面添加 -r 命令,表示遞歸的刪除(子)文件夾和文件夾下的文件,類似於 `rm -rf` 命令。
3、如果文件或路徑裏有中文,可以使用通配符*號,sound/music_*.mp3, 這樣就把sound目錄下以music_開頭的mp3文件都刪除了.
如果你看到類似下面這樣的, 就說明刪除成功了:
Rewrite 48dc599c80e20527ed902928085e7861e6b3cbe6 (266/266)
# Ref 'refs/heads/master' was rewritten
第二步 推送我們修改後的repo
以強制覆蓋的方式推送你的repo,
git push origin master --f --all
第三步: 清理和回收空間
$ rm -rf .git/refs/original/
$ git reflog expire --expire=now --all
$ git gc --prune=now
Counting objects: 2437, done.
# Delta compression using up to 4 threads.
# Compressing objects: 100% (1378/1378), done.
# Writing objects: 100% (2437/2437), done.
# Total 2437 (delta 1461), reused 1802 (delta 1048)
$ git gc --aggressive --prune=now
Counting objects: 2437, done.
# Delta compression using up to 4 threads.
# Compressing objects: 100% (2426/2426), done.
# Writing objects: 100% (2437/2437), done.
# Total 2437 (delta 1483), reused 0 (delta 0)
3、Idea軟件使用
3.1、將某個文件恢復到最近的版本
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-o2elQEAX-1572840941466)(https://raw.githubusercontent.com/HealerJean/HealerJean.github.io/master/blogImages/1572837980928.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-4rvo9H9m-1572840941466)(https://raw.githubusercontent.com/HealerJean/HealerJean.github.io/master/blogImages/1572837987994.png)]
4、git、windos版本問題
4.1、Windos文件不允許有空格
4.2、文件名不能太長
4.2.1、解決方案
git config --global core.longpaths true