Lunski's Clutter

This is a place to put my clutters, no matter you like it or not, welcome here.

0%

Git

常用到覺得好像不需要介紹了…。

基礎

  • git init (初始化)
  • git status (查看git進度)
  • git diff master origin/master (看本地與遠端差異)
  • git log (查commit id)
  • git show (看某個commit的diff)
  • git –set-upstream-to=origin (設定上游)
  • git restore . : 還原所有更動
  • git rm –cached : 將檔案加入untracked
  • git rm -r –cached . : 全加入untracked

程式

何時pull

在開始工作之前 (以便了解最新的更改)
在推送之前 (以防工作時發生了變化)

  • git clone (下載)
  • git pull (方便,下載並自動merge到本地,需處理衝突== fetch+merge)
  • git fetch origin master (安全,只下載主線程式不merge)
  • git merge origin/master (合併主線到當前分支)
  • git reset –hard (pull不過就覆蓋本地更改)

分支

開分支與設定上游

  • git branch (開新分支dev)
  • git push –set-upstream origin (開新分支指定上游)

    查看與切換分支

  • git branch (-r看遠端分支, -a 本機與遠端)
  • git checkout -b (建立並切換到新分支dev)
  • git checkout -b (基於 commit開分支)
  • git checkout master (切到主分支)

遠端分支

  • git branch -v -a (看所有遠端分支)

    remotes/origin/

  • git switch (切到某個遠端分支,只需分支名稱)

  • git checkout -t origin/ (切換到另一個遠端分支)

  • git merge origin/main (將主線合併至新分支)

  • git merge origin/ (將特定分支合併回目前分支)

  • how to use merge

不要怕開分支, 最少功能, 開發, 驗證三分支

只選擇某commit id 合併到主線

1
2
3
4
5
6
* git log 查找要合併的commit id
* git checkout master
* git merge <commit_hash>


git cherry-pick <commit_hash>

Push到遠端主線

1
2
3
4
5
6
7
8
`git init` 
`git add .`
`git commit -m "first commit 這是註解說明"`
`git remote add origin [GitHub Repositories Url]`
`git push -u origin main`

git add . 只影響當前目录和子目錄。
git add -A 保存所有更動。

git tag與commit id差異

  • 比commit id更直觀
  • 重要發行標記, 輕鬆地回到該版本
  • 標記已經審查過的提交

創建標籤: git tag
在特定的提交點上創建標籤: git tag
查看標籤:git tag
查看特定系列的標籤: git tag -l “v1.8.5*”
看特定標籤: git show
刪除標籤:git tag -d

分支會隨著提交而移動,但標籤則是固定留在某個提交點上

Merge/Pull Request

發MR/ PR, 將分支並回主線, 在gitlab介面操作。

發PR去比較新branch與main這個原本branch之間的差異,附上敘述告知專案管理者我做了什麼,管理者再審核是否接受這些修改並merge到「main」分支之中。

回復

  • git reset -h
    –mixed reset HEAD and index
    –soft reset only HEAD
    –hard reset HEAD, index and working tree(丢弃回退的提交中的所有更改)
  • git reset –hard HEAD (回復到上次提交版本)
  • git reset HEAD^^ –hard (^^ (两个^)表示回退2个提交)
  • git reset –hard (回復到指定的提交版本)
  • git reset –hard origin/main (分支同步回主線狀態)
  • git log –oneline -5 (查看最近5筆提交紀錄)
  • git reset –hard HEAD~2 (移除最新2筆commit)

刪除

  • Delete Local Branch

    • git branch –delete
    • git branch -d # Shorter version
    • git branch -D # Force-delete un-merged branches
  • Delete Remote Branch

    • git push origin –delete # Git version 1.7.0 or newer
    • git push origin -d # Shorter version (Git 1.7.0 or newer)
    • git push origin : # Git versions older than 1.7.0
  • Deleting a local remote-tracking branch

    • git branch –delete –remotes /
    • git branch -dr / # Shorter
    • git fetch –prune # Delete multiple obsolete remote-tracking branches
    • git fetch -p # Shorter

上傳

  • git add (或. 全add, add前要先pull)
  • git restore (忽略某個檔案更動)
  • git clean -f (清除所有untracked files)
  • git remote add (添加遠程倉庫)
  • git cherry-pick (只選特定commit)
  • git commit -m
  • git commit –amend (修改最後一次commit)
  • git push –set-upstream origin (第一次上分支,或第一次上失敗再上一次)
  • git push (僅僅是推送目前所在的分支到遠端,並不會指定推送哪個分支)
  • git push origin master (明確指定推送 master 分支到 origin 這個遠端)
  • git push origin HEAD:master push到遠端master

異常

git reset –hard HEAD
git pull

1
2
3
4
5
6
7
8
git pull
`Your local changes to the following files would be overwritten by merge`

git stash
git pull
git stash pop
會多修改的部份,先更正再
git push

git分支commit過的變更合併到主線

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
git checkout master
git merge feature_branch

解決沖突(如果有的話):

如果在合並過程中發生了沖突,Git會提示你解決這些沖突。
你需要手動解決沖突,然後執行git add命令來標記已解決的文件,最後執行git merge --continue來完成合並。

git commit -m "Merge feature_branch into master"
git push origin master

只選擇某commit 合併到主線
git log 查找要合併的commit id
git checkout master
git merge <commit_hash>

之後流程同上

Repo

基於git, 用於Android程式同步

1
2
3
4
5
6
7
1. repo init (Installs Repo in the current directory)
2. repo sync (Downloads new changes and updates the working files in your local environment)
3. git checkout -b "local branch name"
4. repo sync
5. git add/rm (Add/Remove files in local branch)
6. git commit
7. repo upload

Gitflow v.s. Github flow

Gitflow: master、dev、hotfix、feature四類分支

  • master:主線
  • dev:從master拉新功能開發,分支經測試後入主線
  • feature:從dev拉功能開發分支,進行pull request請求,申請將分支合入dev,開發中最常用
  • hotfix:bug修復,或緊急需求開發分支(不在此分支開發新需求)。從master分出,經開發測試完成之後,可以pull requets合入master

注意

  • feature只能從dev分支拉出,hotfix分支只能從master拉出
  • pull request前須先pull
    • hotfix pull master
    • feature pull dev
  • dev穩定後merge 回master
  • Dev只能動到feature, hotfix, Ops提交到master或dev

Github flow: master, develop

重視CICD

ref1

推薦用SourceTree視覺化


如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)

Welcome to my other publishing channels