git操作雜記

===Tangji筆記===================

##git操作
git config --global color.ui true
git merge mybranch (merge from mybranch)
git branch -d mybranch 刪除分支
git branch -D mybranch 強制刪除分支
git branch 列出所有分支
git branch -v 查看各個分支最後一次提交
git branch –merged 查看哪些分支合併入當前分支
git branch –no-merged 查看哪些分支未合併入當前分支
git fetch origin 更新遠程庫到本地
git push origin mybranch 推送分支
git merge origin/mybranch 取遠程分支合併到本地
git checkout -b mybranch origin/mybranch 取遠程分支並分化一個新分支
git push -u origin sean3.5 設置本地分支的默認push分支
git checkout --  src/enterprise/Api/User.php 撤回本地修改
git push origin :mybranch 刪除遠程分支
git log --name-status 每次修改的文件列表, 顯示狀態
git log --name-only 每次修改的文件列表
git log --stat 每次修改的文件列表, 及文件修改的統計
git log --after='2019-05-23' --graph --stat
git whatchanged 每次修改的文件列表
git whatchanged --stat 每次修改的文件列表, 及文件修改的統計
git show 顯示最後一次的文件改變的具體內容

git tag 查看tag
git tag -a V1.2 -m 'release 1.2' 創建tag
git show V1.2 顯示附註信息
git push origin --tags  同步到遠程代碼庫
git tag -d V1.2 刪除本地 V1.2的版本
git push origin :refs/tags/V1.2 刪除線上版本
git fetch origin tag V1.2 獲取遠程版本

git diff-tree -r --author='zhangyi' --no-commit-id --name-only fda6e8a83230f6e2bf82fc3eff33eb705d121a33 a93f3b66e047474be18c26b1420110b71151b696
sudo git diff f4710c4a32975904b00609f3145c709f31392140 HEAD --name-only | cpio -pvdmu /var/www/git_update/update_201800001.tar


-- 從版本庫中刪除指定目錄
.gitignore
git rm -r folder_path --cached 命令即可

 

====================================

1. git日誌查看
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative
git config --global alias.lg "log --graph --pretty=format:'%Cred%H%Creset @%C(yellow)%d%Creset %n Author: %cn <%_ce> %n Date: %_cd %_Cblue(%cr)%Creset %n %n Commit subject: %Cgreen%s%Creset %n'"


在git提交環節,存在三大部分:working tree, index file, commit
這三大部分中:
working tree:就是你所工作在的目錄,每當你在代碼中進行了修改,workingtree的狀態就改變了。
index file:是索引文件,它是連接workingtree和commit的橋樑,每當我們使用git-add命令來登記後,index file的內容就改變了,此時indexfile就和working tree同步了。
commit:是最後的階段,只有commit了,我們的代碼才真正進入了git倉庫。我們使用git-commit就是將indexfile裏的內容提交到commit中


git diff:是查看working tree與index file的差別的。
git diff --cached:是查看index file與commit的差別的。
git diff HEAD:是查看workingtree和commit的差別的。(HEAD代表的是最近的一次commit的信息)

 

 

git log --name-status 每次修改的文件列表, 顯示狀態
git log --name-only 每次修改的文件列表
git log --stat 每次修改的文件列表, 及文件修改的統計
git whatchanged 每次修改的文件列表
git whatchanged --stat 每次修改的文件列表, 及文件修改的統計
git show 顯示最後一次的文件改變的具體內容

 
git log --graph --pretty=format:"%h - %an, %ar %s"  查看主線

 

 

根據他的提示,我做了如下操作,

git config --global push.default "current"

 


2.版本回退
$ git reset --hard HEAD^
## git中用HEAD表示當前版本,HEAD^表示上一版本,HEAD^^表示上一版本
HEAD~100表示上100個版本


## 或者直接指定版本號(不用全輸,只許前面幾位即可)
$ git reset --hard 534688
查看版本號的命令:
$ git reflog

## 如果要單獨回退某一個文件,可在最後加上文件名稱,但不能加 --hard參數
$ git reset HEAD^ index.txt

 

 

 

 

3. 單個文件廢棄
$ git checkout -- index.txt
## 整個工程廢棄
$ git checkout -f
## 這個命令會把你工作區中的修改回退到最後一次add命令之前的狀態
## 即如果緩存區有內容,則回退到和緩存區一直
## 如果緩存區爲空,則回退到和版本庫一致

 

4.創建空分支

 


 
$ git checkout --orphan gh-pages

 

$git checkout . // 撤銷本地

$git reset . //撤銷索引

 

5. git 打標籤

git tag -a v1.01 -m "Relase version 1.01"

=-========================================

Git刪除暫存區或版本庫中的文件


    我們知道Git有三大區(工作區、暫存區、版本庫)以及幾個狀態(untracked、unstaged、uncommited),下面只是簡述下Git的大概工作流程,詳細的可以參見本博客的其他有關Git的文章
  (1)打開你的項目文件夾,除了隱藏的.git文件夾,其他項目文件位於的地方便是工作區,工作區的文件需要添加到Git的暫存區(git add),隨後再提交到Git的版本庫(git commit)。
  (2)首次新建的文件都是untracked狀態(未跟蹤),此時需要git add到暫存區,Git便會在暫存區中生成一個該文件的索引,文件此時處於uncommited狀態,需要git commit生成版本庫。添加到了版本庫之後,再對文件進行修改,那麼文件的狀態會變爲unstaged狀態。
 
1 刪除錯誤添加到暫存區的文件
    有時你在工作區新建了文件TestFile,並且已經將它添加到了暫存區,git會告知,現有有一個文件未提交到版本庫,如下圖:


    1.1 僅僅刪除暫存區裏的文件    
    此時你想撤銷錯誤添加到暫存區裏的文件,可以輸入以下命令:
    git rm --cache 文件名
 
    上面的命令僅僅刪除暫存區的文件而已,不會影響工作區的文件,如上圖,TestFile.txt仍然存在,此時輸入下面命令,git會告知有一個未跟蹤的文件TestFile.txt。
    git status
 
    1.2 刪除暫存區和工作區的文件
    git rm -f 文件名   工作區的文件也被刪除了。


2 刪除錯誤提交的commit
    有時,不僅添加到了暫存區,而且commit到了版本庫,這個時候就不能使用git rm了,需要使用git reset命令。
    錯誤提交到了版本庫,此時無論工作區、暫存區,還是版本庫,這三者的內容都是一樣的,所以在這種情況下,只是刪除了工作區和暫存區的文件,下一次用該版本庫回滾那個誤添加的文件還會重新生成。
    這個時候,我們必須撤銷版本庫的修改才能解決問題!
    git reset有三個選項,--hard、--mixed、--soft。
    //僅僅只是撤銷已提交的版本庫,不會修改暫存區和工作區
    git reset --soft 版本庫ID
 
    //僅僅只是撤銷已提交的版本庫和暫存區,不會修改工作區
    git reset --mixed 版本庫ID
 
    //徹底將工作區、暫存區和版本庫記錄恢復到指定的版本庫
    git reset --hard 版本庫ID
    那我們到底應該用哪個選項好呢?
    (1)如果你是在提交了後,對工作區的代碼做了修改,並且想保留這些修改,那麼可以使用git reset --mixed 版本庫ID,注意這個版本庫ID應該不是你剛剛提交的版本庫ID,而是剛剛提交版本庫的上一個版本庫。如下圖:
    (2)如果不想保留這些修改,可以直接使用徹底的恢復命令,git reset --hard 版本庫ID。
    (3)爲什麼不使用--soft呢,因爲它只是恢復了版本庫,暫存區仍然存在你錯誤提交的文件索引,還需要進一步使用上一節的刪除錯誤添加到暫存區的文件,詳細見上文。

 

======================================================================

刪除本地分支,並重新拉取遠程分支複製到本地
1. 刪除本地分支


假設想要刪除本地的分支temp,並且當前處在temp分支上,首先需要切換到別的分支(假設切換到develop分支):


git checkout develop  //切換到develop分支


git branch  //此時處在develop分支


git branch -D temp  //刪除本地temp分支
 


2.重新拉取遠程倉庫代碼,並自動創建分支


git fetch 會將遠程代碼的更新(commit)拉取到本地。


git fetch origin temp:temp  //拉取遠程庫temp分支的代碼到本地的temp分支,如果不存在temp分支,將自動創建temp分支
git fetch <遠程主機名>  //將遠程庫的更新(commit)拉取到本地
git fetch <遠程主機名> <分支名>  //將遠程庫的<分支名>的分支拉取到本地

 

 

 

 

發佈了98 篇原創文章 · 獲贊 89 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章