git 常見場景命令行總結

1.暫存工作區內容

git stash 保留當前工作區狀態,只會儲藏已經在索引中的文件;指定 --include-untracked 或 -u 標記,會存儲未被索引的文件;--keep-index,不會儲藏已暫存的東西;

git stash list 查看保留的工作狀態

git stash pop  恢復工作區狀態

(git stash pop恢復工作區的同時會刪除stash中的內容;如果不想刪除內容,可以使用git stash apply恢復工作區,然後再使用git stash drop刪除stash中的內容,git stash apply 版本號 可以用來恢復指定版本的工作區內容)

2.rm誤刪除文件恢復

git reset HEAD file

git checkout -- file

3.版本切換

git reset --hard commit_id    撤銷修改,但是不會保留修改

git reset --soft commit_id      保留修改,將改動放至緩存區

git reset --mixed commit_id   保留修改,不將改動放至緩存區

4.修改commit提交信息

git commit --amend #修改最後一次提交的commit信息

5.變基

rebase 可以把本地未push的分叉提交歷史整理成直線,也可以與commit操作結合,更改commit信息

底層操作過程:先將HEAD指向目標分支和當前分支的共同祖先commit節點;對比當前分支指針與HEAD指針提取相應的修改並存爲臨時文件;將當前分支指針指向目標分支指針;將臨時文件依序apply完以後再將HEAD指向當前分支

git rebase -i HEAD~n

6.挑揀commit提交

cherry-pick 可以用於將在其他分支上的 commit 修改,移植到當前的分支。當執行完 cherry-pick 之後,將會自動生成一個新的 commit 進行提交,也就是會有一個新的 commit ID。增加 -x 參數,表示保留原提交的作者信息進行提交

*可以一次將一個連續的時間序列內的 commit ,設定一個開始和結束的 commit ,進行 cherry-pick 操作;

git cherry_pick <start-commit-id>…<end-commit-id>   左開右閉

git cherry_pick <start-commit-id>^…<end-commit-id> 左閉右閉

*注意:cherry pick的commit id一定要按照時間順序來,不然很容易出現問題

7.在不同分支挑揀文件

挑選某個分支上的某些文件至當前分支:git checkout <branch name> file1 file2 file3  

eg:git checkout feature f.txt 將feature分支的f.txt複製到當前分支

將當前分支上的某個文件至某個分支:git checkout --patch <branch name> file1 file2  

eg:git checkout --patch master f.txt  將當前分支上的f.txt粘貼至master分支

8.拉取遠程分支至本地分支

git checkout -b 本地分支名 遠程倉庫名/遠程分支名

9.合併分支

git merge dev  將dev分支合併至當前分支

底層過程:git會查找兩個分支末端所指的快照以及這兩個分支的祖先,做三方合併;當兩個要合併的快照其中一個爲祖先時,將默認爲fast-forward模式合併(簡單的將指針向前推進),該模式下刪除分支之後可能會丟失分支信息;爲了保留完整信息,可以禁用Fast-forward模式:git merge --no-ff -m “merge with no-ff” <branch mane>  --no-ff 表示禁用Fast-forward,此時git會在merge時生成一個新的commit,因此需要使用-m 提交相關commit描述

10.拉取遠程分支更新至本地

git pull <遠程倉庫名> <遠程分支名>:<本地分支名>

git pull = git fetch + git merge(git pull 先從線上抓取東西下來fetch,然後更新進度合併merge)

git pull --rebase (先從線上抓取東西下來fetch,然後更新進度合併rebase)

*如果git pull提示no tracking information,則說明本地分支和遠程分支的鏈接關係沒有創建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>

11.提交代碼至遠程倉庫

git push <倉庫名>  <分支名>  將本地倉庫所做更改提交至遠程倉庫某一分支

*首次push:git push -u origin master

12.比較兩個版本代碼之間的不同

git diff                      比較算入暫存區修改的當前文件與工作區文件之間的區別

git diff HEAD          比較當前最新commit與工作區的區別

git diff commit_id    比較某個commit與工作區的區別

git diff --cached        比較最新提交與暫存區的區別

git diff --cached commit_id   比較某個commit與暫存區的區別

13.Fork和分支的區別

Fork:不是Git操作而是GitHub操作,將原項目進行拷貝,新建一個Repository,在該Repository所做操作,對原來的項目的Repository沒有任何影響。當想要向原項目合併時,需要提交merge Requests或pull Requests。

分支:Git操作,是一個項目倉庫中的代碼管理方式,一種方便多人協作的方式。在原項目的Resposity進行操作,操作歷史會被記錄。

14.添加自定義git命令

*修改global文件,需在.gitconf文件中添加自定義命令表示方式,等號右邊的操作等同於等號左邊的操作:

vim ~/.gitconf 

eg:添加內容

[alias]
  lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
  mycommit = log --author=cym

保存修改文件之後,在命令行中使用命令git lg與在命令行中使用命令log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit效果是一樣的

*也可以修改某個項目的.gitconf文件,此時的自定義命令只對該項目起作用。項目的.gitconf文件在該項目主目錄下的.git文件下名爲config

eg:項目名爲test  該項目的conf文件路徑爲:test/.git/config

15.查看某次提交的具體修改內容

git show <commit id>

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