Git具備代碼團隊合作

前言

博主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

img

mixed修改了index,index中給定commit之後的修改被unstaged。如果現在執行git commit 將不會發生任何事,因爲暫存區中沒有修改,在提交之前需要再次執行git add

2、–soft

img

使用--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

ContactAuthor

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章