個人git使用筆記

- git rebase

開分支 -> 各自開發不一樣的模塊 -> 合併代碼的時候,先提交本身的分支而後rebase本身的分支到master最新的部分
rebase誰就是把誰看成本身的基點,而後把本身的提交跟在後面,rebase完後再切換到maser, masterrebase本身的開發的功能分支,
完事以後能夠打個tag,讓分支滾蛋html

在dev分支 -> rebase主分支master最新的主幹代碼
切到master主分支 -> rebase到最新代碼 -> 卸磨殺驢移除分支

在開發過程當中使用git rebase仍是git merge,優缺點分別是什麼?git

- git merge

git merge b b分支合併到當前分支
一樣 git rebase b,也是把 b分支合併到當前分支github

主要看當前所在的分支, merge誰就合併誰 合併的意思是重複的無論 加入沒有的,還有就是本來存在的被改了會被覆蓋以及衝突shell

https://www.cnblogs.com/marblemm/p/7161614.html安全

git fetch origin master:tmp
git diff tmp 
git merge tmp
git branch -d tmp

從遠程獲取最新的版本到本地的tmp分支上,以後再進行比較合併ssh

- git pull:至關因而從遠程獲取最新版本並merge到本地

git pull origin master
上述命令其實至關於git fetch 和 git merge
在實際使用中,git fetch更安全一些
由於在merge前,咱們能夠查看更新狀況,而後再決定是否合併

gfo master :temp
gd temp 比較 
gm temp 合併遠程分支
gbd 「temp」 刪掉臨時分支

- 分支管理


只建立分支 git branch branchName
只切換分支 git checkout branchName 或者
git switch branchName
建立並切換 git checkout -b branchName 或者
git switch -c branchName
刪除本地分支 git branch -D branchName 或者
git branch -d branchName
刪除遠程分支 git push origin --delete branchName 或者
git branch -r -d origin/dev && git push origin :dev 或者
git push origin -d <branch name> 其中
git push origin :branchName 原型是 git push origin master:branchName
將本地的master分支推送到遠程的branchName
查看全部分支 git branch
合併分支 git merge branchName 通常是切換到主分支(master)把旁分支(branchName)合併 或者
使用 git merge branchName -m "xxx" --no-ff 其中--no-ff
Git默認會用Fast forward模式,但這種模式下,刪除分支後,
會丟掉分支信息,強制禁用Fast forward模式,
加上--no-ff就能夠查看完整的分支歷史信息,不受分支刪除影響。

- tag管理

git tag #查看已有tag
git tag tagName #當前分支最新節點的tag
# 指定節點打tag並添加release note信息  
git tag -a v0.1 -m "version 0.1 released" 1094adb
git tag -d <tagname> #刪除本地標籤
git show <tagname> #能夠看到說明文字:
git push origin v1.0 #推送指定本地標籤
git push origin --tags #一次性所有推
git push origin :refs/tags/v0.9 #刪除指定的遠程標籤
git push origin :<branch>/<tag> #刪除指定的遠程標籤 注意冒號 : 必不可少, 後面跟遠程庫的分支名/標籤名

- 代碼回滾

# 回滾上一個版本,回滾到上上個則 HEAD^^,以此類推往回滾100次則很難數得清楚^的個數能夠寫成 HEAD~100 這樣
git reset --hard HEAD^   
# 經常使用的是這種指定commit_id切換
git reset --hard a2bcke52

撤銷修改工具

場景1:當你改亂了工做區某個文件的內容,想直接丟棄工做區的修改時,用命令git checkout -- file。

場景2:當你不但改亂了工做區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操做。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫

場景4: 就是把錯誤的改動已經推送到遠程庫了,如何撤回呢? 
分兩個狀況處理: 

本地: 
本地節點代碼回滾或者撤回最近一次提交從新修改以後`git  commit --amend`便可,
本地不會生成一條新的提交記錄,而是覆蓋原來的提交記錄. 也能夠使用回滾的方式 git reset --soft  HEAD^ 回滾到上一個節點,
若是改動的東西比較多仍是--amend靠譜些,或者也先把代碼拷出來一份而後再使用reset,最後把新增的部分代碼手動加進去(這樣賊麻煩)  

遠程:
 已經推送到遠程的處理,與他人合做的話切記第一時間溝通好(省得形成事故),遠程沒得選,只能強推幹掉記錄 git push -u origin --force branchName 
除非公司或者團隊已經搭建好提交代碼合併代碼的規範流程,在本身分支上隨便你怎麼玩,多人合做主分支的話就略顯尷尬(--force慎用 (逃

- 生成SSH-Key

#1. 檢查是否有ssh key
 cd ~/.ssh 查看這個目錄下的文件
 #2. 生成key
 ssh-keygen -t rsa -C "you email@email.com" 或者去掉 -t rsa
 #3. 拷貝公鑰,設置好對應的key github或者使用的站點
 cat ~/.ssh/id_rsa.pub  查看並拷貝到到git添加設置key
#或者用命令添加到剪貼板
pbcopy < ~/.ssh/id_rsa.pub
#4. 測試一下這個ssh能不能使用
ssh -T git@github.com

- 配置用戶名和郵箱等信息

# 通常全局設置 
git config --global user.name  "username"  
git config --global user.email  "email"

# 針對單個倉庫設置 去掉 --global ,在項目.git目錄下找到.git/config文件直接修改
(偶爾一臺電腦可能有多個github帳號使用,發現上傳不了代碼也可在config文件直接添加用戶名郵箱來指定)
[user]
    name = 要設置的username
    email = 要設置的email
或者執行以下語句:
git config  user.name  "username"  
git config  user.email  "email"

# 最後查看配置列表
git config --list

- 本地庫關聯遠程庫

通常操做: 遠程建立一個倉庫,而後拉下來一個文件夾,在文件夾中增刪改一些操做
可能的狀況:gitlab

  1. 本地已是已存在的git倉庫,但並無與遠程庫關聯
  2. 本地還沒建立git,更別提什麼遠程庫了
若是本地沒有git管理,先本地庫git初始化
git init
git add .
git commit -m"log message"
若是已存在或者已經建立好本地git,則:(這裏是ssh)
git remote add origin git@github.com:WangGuibin/TestDemo.git
沒報錯則說明關聯成功
git pull 拉下來
而後rebase或者git reset --hard commitid移動到正確的位置
而後再把本地的東西提交上去

- git解決每次拉取代碼都須要用戶名密碼

  1. 執行git config --global credential.helper store,在~/.git/config目錄下會生成一個配置文件(全局的),這裏會記錄你的密碼和賬號,再執行git pull輸入一次正確的賬號密碼以後就不用再痛苦重複輸密碼這件事了.
  2. 使用ssh-key綁定的形式,不管是gitlab仍是gitblit應該都支持綁定的,只要綁定了基本不用輸密碼的操做

- 公司搭建的git如何拉取代碼?

# 組成結構是 協議頭 + 用戶名:密碼@域名
 git clone https://{username}:{password}@github.com

- 查看終端oh-my-zsh工具封裝的git快捷命令

alias | grep git
相關文章
相關標籤/搜索