Git 操作整理筆記

初始安裝、添加至暫存區、提交到版本庫

$ git
#查看是否安裝了git
$ git config --global user.name "XXX"
$ git config --global user.email "[email protected]"
#配置全局git庫的用戶信息
$ git init
#當前目錄下創建空的git倉庫
ls -ah 
#查看隱藏目錄  .git版本庫等

丟棄暫存區更改、丟棄工作區更改

$ git checkout -- [filename]
#或者 
$ git resotre [filename]
#恢復指定文件到上一次commit或者上一次add時的狀態
#該命令也可以用來恢復誤刪的文件
#總之,git checkout其實是用版本庫裏的版本替換工作區的版#本,無論工作區是修改還是刪除,都可以“一鍵還原”。
$ git checkout HEAD [filename]
#或者
$ git restore --staged [filename]
#將文件在暫存區的修改放回到工作區內
#然後再使用git checkout -- [文件名]將工作區的修改丟棄

版本回退

$ git add -A . 
#當前目錄文件改動全部添加到本地庫暫存區
$ git commit -m "說明信息"
#將暫存區的文件提交到本地庫
$ git status
#查看倉庫當前狀態
$ git diff 文件名 
#查看指定的文件改動
$ git log
#查看提交記錄
$ git log --pretty=online
#簡要的提交記錄
$ git reset --hard HEAD^
#回退到上一個版本 (HEAD^^上兩個版本... HEAD~100上100個版本)

如果記不清到底是前幾次提交的了,可以通過reflog查看commitid,然後恢復到指定的版本

$ git reset --hard ‘版本號(不用全部,部分即可)’
#按commitid回退版本
$ git reflog
#查看命令記錄,可以用來回退到之前的最新版本

連接遠程倉庫

#Git Base下:
$ ssh-keygen -t rsa -C "[email protected]"
#創建SSH Key
#本地倉庫關聯遠程倉庫
$ git remote add origin [email protected]:[you github account name]/[product name].git
#添加後 遠程倉庫的名字就是origin
#本地推送提交的信息到遠程倉庫
$ git push -u origin master
#由於遠程倉庫是空的,我們第一次推送master分支時,加上-u參數,git不但會把本地的master分支內容推送到遠程新的master分支,還會把本地master分支和遠程master分支關聯起來,在以後的推送和拉取時可以簡化命令
#之後將可以使用 git push  代替  git push origin master
#從遠程倉庫克隆項目到本地
$ git clone [email protected]:[you github account name]/[product name].git

使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內部就無法使用ssh協議而只能用https。

分支創建、切換、合併、強制刪除

$ git checkout -b [新分支名]
#創建新分支並切換
$ git branch [新分支名]
#創建分支
$ git checkout [分支名]
#切換分支
$ git branch
#查看分支信息(*代表當前分支)
$ git merge [分支名]
#合併目標分支到當前分支上
$ git branch -d [分支名]
#刪除分支

######新版本支持switch操作分支
分支切換爲了避免與checkout關鍵字其他功能混淆,可以使用switch代替checkout

$ git switch -c [新分支名]
#創建並切換分支
$ git switch [分支名]
直接切換到已有分支

使用新的git switch命令,比checkout要更容易理解

$ git log --graph --pretty=oneline --abbrev-commit
查看分支合併情況
$ git merge --no-ff -m "提交信息" [分支]
#合併分支並創建一次提交記錄,可在提交記錄上查看到merge信息

合併分支時,加上–no-ff參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。

########
如果要丟棄一個沒有被合併過的分支,可以通過git branch -D 強行刪除。

遠程分支

$ git branch -a
#查看遠程分支列表
#如果查看不到想要分支,試試 
$ git pull
#再
$ git branch -a
#刪除遠程分支
git push origin --delete <branchName>

臨時存儲工作區變更、批量分支更改

$ git stash
#將當前工作區的工作現場記錄下來,便於切換分支,並且可以隨時將其恢復
$ git stash list
#查看stash記錄列表
$ git stash pop
#恢復stash中的最新記錄並刪除掉該記錄
$ git stash apply
#恢復stash中的最新記錄,但不刪除該記錄
$ git stash apply/pop [記錄的標題,例如stash@{0}]
#恢復指定的記錄

#######
如果兩個分支中含有相同的bug,修復了其中一個並提交之後,需要將這次改動複製到另一個分支上
需要使用cherry-pick命令
$ git cherry-pick [提交時的id]

小結
修復bug時,我們會通過創建新的bug分支進行修復,然後合併,最後刪除;

當手頭工作沒有完成時,先把工作現場git stash一下,然後去修復bug,修復後,再git stash pop,回到工作現場;

在master分支上修復的bug,想要合併到當前dev分支,可以用git cherry-pick 命令,把bug提交的修改“複製”到當前分支,避免重複勞動。

分支遠程推送、提交時衝突解決

推送分支
推送分支,就是把該分支上的所有本地提交推送到遠程庫。推送時,要指定本地分支,這樣,Git就會把該分支推送到遠程庫對應的遠程分支上:

$ git push origin master
#將本地master分支推送到遠程上

如果要推送其他分支,比如dev,就改成:

$ git push origin dev

#######
push推送時出現問題時,需要先將代碼pull下來,解決衝突後再push上去

當直接使用$ git pull時去拉代碼時,會報錯
There is no tracking information for the current branch.
Please specify which branch you want to merge with.

解決辦法一種是提供詳細分支參數
$ git pull <remote> <branch>
#或者將當前分支關聯到遠程分支
$ git branch --set-upstream-to=origin/<branch> dev
#指定本地dev分支與遠程origin/dev分支的鏈接
$ git branch --set-upstream-to=origin/dev dev

將持續更新…

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