成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

git使用雜記

移動開發 Android
作為一個開發者,如果現在還不知道git或者還不會使用git,那么你應該好好的反省。自己去好好看一遍的入門介紹吧。今天只是對自己在日常中使用git的一些常用命令的介紹與自己認為不錯且能提高我們辦公效率的命令。內容可能會有點雜亂,但絕對都是經典的命令,在此記下筆記,也希望能幫助來賞臉關顧的你們。

前言

作為一個開發者,如果現在還不知道git或者還不會使用git,那么你應該好好的反省。自己去好好看一遍的入門介紹吧。今天只是對自己在日常中使用git的一些常用命令的介紹與自己認為不錯且能提高我們辦公效率的命令。內容可能會有點雜亂,但絕對都是經典的命令,在此記下筆記,也希望能幫助來賞臉關顧的你們。

區域

在這之前,來介紹一下git的三個區域

  • 工作區(working directory)
  • 暫存區(stage index)
  • 本地歷史區(history)

通過一張圖就能簡潔易懂的明白它們之間的轉化。 

 

 

 

clone

先從clone命令來介紹,使用過git的都知道它。git colne命令拉取遠程倉庫到本地。但當我們要拉取到指定的文件夾下時,你可能會直接mkdir,其實無需如此,一條命令就能搞定git clone 遠程倉庫 文件名,就是如此簡單。

rm

我們在工作中可能會遇到這么一種情況,使用git add .直接將工作區的所有修改的文件加入到暫存區了,但是后面發現有一個文件先不要加進去,此時我們就可以使用如下命令就可以將該文件退回到工作區中。

  1. git rm --cached <file> 

stash

有這么一種情況,當你正在開發中時,有一個線上的緊急bug需要修復,此時開發中的功能又沒有完成你不想提交,此時你可以使用git stash將工作區的文件都存放起來。這時你就可以放心的去切分支修復bug,修復完之后執行git stash pop可以將先前存放的取出,當然也有一些其他的相關命令例如:git stash list查看存放的記錄,git stash drop丟棄存放的記錄。

tag

可能在開發中我們要打標簽git tag tagName,并且要將相應的標簽推送到遠程倉庫中,此時可以使用如下命令進行推送。

  1. git push --tags tagName 

amend

當你commit以后,發現有一個文件沒有加進上次的commit中,或者又修改了一些文件。此時你并不想增加新的commit信息,只是想將其加入到上次的commit中。這時你就可以使用

  1. git commit --amend <file> 

將暫存區的文件加入其中,并且你也可以修改此時的commit信息。

reset

reset也能實現前面的rm的效果,可以使用如下命令來替代前面的git rm --cached <file>命令

  1. git reset HEAD <file> 

但reset用途更廣,結合soft參數可以回撤到任意的commit節點進行操作

  1. git reset --soft index 

執行該命令之后,就回到index處,工作區不變、暫存區回到當時的index處。另外還有一個hard參數。

  1. git reset --hard index 

與soft可以說對立,它的效果就在于工作區與暫存區的不同,它會清空這兩個區。

rebase

對于rebase是重定向的意思,如果你當前的分支與遠程的分支commit信息存在差異時,會提醒你此時不能進行push,必須先將遠程的commit信息拉去到本地來,才能進行提交。對于這種情況就可以使用rebase命令了。如下當前處在develop分支 

 

 

 

此時應該先執行rebase命令

  1. git fetch 
  2. git rebase origin/master  

執行完之后,***再push到遠程master

  1. git push origin master 

最終各個分支的情況就是上圖的效果了。如果覺得命令多難記,這里也可用一條命令來完成上面的效果

  1. git pull --rebase origin master 

這是rebase的簡單運用,也是常見的命令了。下面介紹rebase的一個可選參數--onto。

--onto

使用場景:開發過程中我們都會創建不同的分支進行開發不同的功能,當你在分支A上創建了新分支B進行開發功能并且也提交了一些commit時,此時你發現原來A分支上有錯誤的commit,如果要rebase到master上時,不能將這個錯誤的commit也附帶上。這個時候就該--onto大顯神通了。 

 

 

 

當前處在B分支,要得到上面的結果,只需執行如下命令

  1. git rebase --onto master <b的commit hash code> B 

這個不僅可以針對不同的分支,也能作用于同一個分支上。所以針對上面的情況可以只對分支B進行操作,等價命令如下:

  1. git rebase --onto <a的commit hash code> <b的commit hash code> B 

--interactive

當我們要修改commit信息的名稱時,如果要修改的commit處在***個時,可以使用

  1. git commit --amend 

如果不是***個時,我們就要使用到rebase的--interactive可選參數了,可以簡寫為-i。

  1. git rebase -i <commit hash code> 

參數后面的commit hash code為需要修改的commit的前一個。執行之后就會出現如下類似的信息:

  1. pick 137cf0a First coommit 
  2. pick 163dc38 Second commit 
  3.  
  4. # Rebase f9aee6e..163dc38 onto f9aee6e (2 command(s)) 
  5. # Commands: 
  6. # p, pick = use commit 
  7. # r, reword = use commit, but edit the commit message 
  8. # e, edit = use commit, but stop for amending 
  9. # s, squash = use commit, but meld into previous commit 
  10. # f, fixup = like "squash", but discard this commit's log message 
  11. # x, exec = run command (the rest of the line) using shell 
  12. # These lines can be re-ordered; they are executed from top to bottom. 
  13. # If you remove a line here THAT COMMIT WILL BE LOST. 
  14. # However, if you remove everything, the rebase will be aborted. 
  15. # Note that empty commits are commented out  

根據提示我們可以有6個可選擇的操作。相信提示已經說的很明顯了,對于我們這種要修改First coommit的情況,需要使用r。

  1. r 137cf0a First commit 
  2. pick 163dc38 Second commit  

執行之后會跳到修該First coomit的界面,進行修改即可。

  1. First commit 
  2.  
  3. # Please enter the commit message for your changes. Lines starting 
  4. with '#' will be ignored, and an empty message aborts the commit
  5. Date:      Thu Jan 26 23:07:10 2017 +0800 
  6. # rebase in progress; onto f9aee6e 
  7. # You are currently editing a commit while rebasing branch 'master' on 'f9aee6e'
  8. # Changes to be committed
  9. #       new file:   file1  

至于其他的操作項,有興趣的可以自己去嘗試一下。例如s操作就可以用來合并commit。

branch

相信branch都很熟悉,我這里要說的是他的另一種可能會用到的情況。場景是這樣的:如果在你進行創建新的分支時,并不想從當前的commit信息節點進行創建分支。 

 

 

 

要實現如上效果只需在創建分支時在后面再添加額外的參數,該參數就是你所需調到的commit節點的hash code

  1. git branch new_branch <commit hash code> 

push

這里提一下push的--set-upstream,它的效果是設置上游分支,當我們將遠程不存在的本地分支推送到遠程時,如果不在推送的分支上,我們一般會使用如下命令進行推送。

  1. git checkout push_branch 
  2. git push origin push_branch  

下面是簡潔的方法,使用該參數無需切換分支,可以直接使用如下命令進行推送。

  1. git push --set-upstream origin push_branch 

cherry-pick

這個命令的場景是:當你所在的分支沒用,你要刪除它,但其中的一個commit你還是想推送到遠程master上。 

 

 

 

將分支切換到master,執行以下命令:

  1. git cherry-pick <b的 commit hash code> 

merge

我們所熟知的是使用merge來進行分支的合并,每次使用merge時都會自動將副分支合并成一個commit進行推送到主分支上,那么如果我不想它自動推送到主分支上時(可能我還需要進行修改),這時就可以使用--squash操作

  1. git merge --squash dev_branch 

執行完以上命令后,我們就可以在暫存區看到一個還未提交的文件狀態。

reflog

當我們切分支太頻繁了之后,可能會忘了一些分支是從哪個分支切過來的,此時可以使用如下命令查看:

  1. git reflog  
  1. 894a16d HEAD@{0}: commitcommit another todo 
  2. 6876e5b HEAD@{1}: checkout: moving from solve_world_hunger to kill_the_batman 
  3. 324336a HEAD@{2}: commitcommit todo 
  4. 6876e5b HEAD@{3}: checkout: moving from blowup_sun_for_ransom to solve_world_hunger 
  5. 6876e5b HEAD@{4}: checkout: moving from kill_the_batman to blowup_sun_for_ransom 
  6. 6876e5b HEAD@{5}: checkout: moving from cure_common_cold to kill_the_batman 
  7. 6876e5b HEAD@{6}: commit (initial): initial commit  

這樣我們就可以看到所用的操作歷史了。這樣如果我們使用git reset命令不小心刪除了需要的東西。可以通過此來查找到刪除操作的hash code,之后就可以通過如下命令進行恢復。 

  1. git checkout <hash code> 

目前想到的就這些了,希望能有所幫助

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2014-07-28 14:43:14

git開源

2015-08-06 10:28:24

git規范流程

2020-01-18 18:41:13

GitGit服務器開源

2020-11-23 07:27:22

Git Flow

2021-03-08 07:46:53

Git開源控制系統

2018-05-04 09:14:09

Git技巧shell命令

2020-10-27 07:31:35

GitGit RevertGit Reset

2021-01-04 13:25:10

Git開源工具

2010-05-25 16:39:56

SVN中使用Git

2021-10-13 13:51:24

MDKGit管理

2019-07-08 09:10:48

TigGitLinux

2017-03-13 16:48:05

Git技巧

2022-04-14 06:16:07

Gitbase開源

2015-08-24 08:59:13

Git技巧

2012-05-04 10:20:23

JavaSwingNinePatch

2016-12-19 14:59:55

Git二進制管理

2024-08-07 10:24:04

2020-07-08 11:07:32

Git撤銷代碼

2010-05-25 16:52:39

SVN中使用Git

2011-08-09 10:20:55

GitLinux遠程倉庫
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产黄色网 | 久久久999成人 | 黄色国产在线视频 | 妹子干综合 | 操操操日日日 | 91免费在线看 | 日韩中文字幕av | 久久久精品一区 | 金莲网 | 久久精品欧美视频 | 国产色网站 | 久热9| 久久久爽爽爽美女图片 | 天天夜干| 欧美一区二区成人 | 亚洲精品久久久久久首妖 | 国产精品久久精品 | 一区二区高清 | 在线免费看黄 | 国产精品一码二码三码在线 | 久久看精品 | 国产成人叼嘿视频在线观看 | 亚洲精品一区二区三区在线 | 欧美成人精品 | 久久精品在线免费视频 | 欧美一区二区免费 | 麻豆一区二区三区精品视频 | 国产成人午夜精品影院游乐网 | 男女搞网站| 欧美8一10sex性hd | 深夜福利影院 | 中文字幕精品一区二区三区精品 | 超碰97干| 国产色网 | 成人精品一区二区三区中文字幕 | 亚洲精品一区二区 | 中文字幕视频在线看5 | 久久精品国产一区二区电影 | 在线免费观看欧美 | 国产精品高潮呻吟久久aⅴ码 | 91精品一区二区三区久久久久 |