git 你需要知道的小技巧

拉取遠(yuǎn)程git項(xiàng)目的某個(gè)分支


  • master分支:默認(rèn)會(huì)拉取的分支石抡,直接git clone URL就可以獲取到檐嚣。
    $ git clone https://git.oschina.net/androidJP/Demo.git
    
  • 非master分支:需要git fetchgit checkout -b XXX remote倉(cāng)庫(kù)/XXX結(jié)合使用。
    $ git clone https://git.oschina.net/androidJP/Demo.git
    ///項(xiàng)目的默認(rèn)分支被克隆下來(lái)了
    $ git branch
    /// 輸出:如master 等已經(jīng)拉取到的分支名和當(dāng)前分支
    $ git fetch
    $ git checkout -b develop origin/develop
    /// 拉取遠(yuǎn)程的develop分支并本地切換到了develop分支
    

本地分支pull不了


原因:你的本地分支沒(méi)有關(guān)聯(lián)上遠(yuǎn)程分支.

  • 方法一:直接指定要pull哪個(gè)遠(yuǎn)程分支(默認(rèn)會(huì)merge):
    $ git pull origin <遠(yuǎn)程分支名>
    
  • 方法二:綁定某個(gè)分支啰扛,之后就直接git pull 即可:
    $ git branch --set-upstream-to=origin/<遠(yuǎn)程分支名>  <本地分支名>
    

本地創(chuàng)建一個(gè)新分支并推送到遠(yuǎn)程嚎京,讓遠(yuǎn)程也生成新分支


$ git checkout -b branchA
....
$ git add . 
$ git commit -m "what you change"
/// 將本地分支推到遠(yuǎn)程的同名分支上
$ git push origin branchA
或者  (-u 的作用是選定默認(rèn)遠(yuǎn)程倉(cāng)庫(kù))
$ git push -u origin branchA

版本回滾和還原


  1. 回滾
  • 法一:通過(guò)git log查看版本號(hào),然后通過(guò)版本號(hào)來(lái)定位HEAD應(yīng)該指向哪里隐解。
    $ git log --pretty=oneline
    $ git reset --hard 12345
    
  • 法二:通過(guò)HEAD^ 等鞍帝,回滾到上一個(gè)/上N個(gè)版本
    // 上個(gè)版本
    $ git reset --hard HEAD^
    //上上個(gè)版本
    $ git reset --hard HEAD^^
    // 前100個(gè)版本
    $ git reset --hard HEAD~100
    
  1. 還原
    原理:還是使用reset --hard <版本號(hào)>的方式實(shí)現(xiàn),并通過(guò)git reflog來(lái)獲取以前的git操作記錄煞茫,從而得到對(duì)應(yīng)的版本號(hào)帕涌。
$ git reflog
$ git reset --hard 12345

不小心寫(xiě)了句“老板真欠扁”,怎么辦续徽?


  1. 如果你已經(jīng)commit了
    恭喜你蚓曼,只能用版本回滾了。(如果老板沒(méi)有你最新提交版本的版本號(hào)的話(huà))
  2. 幸好钦扭,我的文件還在工作區(qū)纫版,沒(méi)有被add。
    ///將我這個(gè)文件myFile.txt的所有修改都清空
    $ git checkout -- myFile.txt
    
  3. 哦哦土全,我的文件add進(jìn)了暫存區(qū)捎琐。
    // 第一步,還原 add 這個(gè)操作(暫存區(qū) --> 工作區(qū))
    $ git reset HEAD myFile.txt
    // 第二步裹匙,清空工作區(qū)(工作區(qū) --> 未修改)
    $ git checkout -- myFile.txt
    

SSH 公約私鑰生成


///在你的用戶(hù)主目錄下的 .ssh 文件夾中生成公鑰和私鑰
$ ssh-keygen -t rsa -C "youremail@example.com"

分支的原理


  1. 原理:
    • HEAD永遠(yuǎn)指向當(dāng)前分支。
    • 默認(rèn):HEAD 指向 master末秃,master指向最新提交概页。
    • 合并分支,是:站在待合并分支上练慕,將這個(gè)分支點(diǎn)的指針惰匙,指向要合并到的分支指針位置技掏。
  2. 相關(guān)命令:


分支合并與沖突解決


  1. 本地兩個(gè)分支的merge沖突解決:
    1. 合并
    $ git checkout develop
    $ git merge  newBranch1
    
    1. 合并后,發(fā)現(xiàn)沖突项鬼,一般表現(xiàn)形式如下:
    ..............
    <<<<<<< HEAD
    分支 develop 上的內(nèi)容
    =======
    分支 newBranch1上的修改內(nèi)容
    >>>>>>> newBranch1
    
    1. 自己用編輯器打開(kāi)文件進(jìn)行解決哑梳。
    2. 最后addcommit 提交,這樣绘盟,就完成了一個(gè)分支的合并鸠真。
  2. 使用--no-ff禁止fast forward提交,以保留合并的分支信息龄毡,在分支被刪除后吠卷,也會(huì)保留分支的合并記錄。
    1. 合并
    $ git merge --no-ff -m "merge with no-ff" dev 
    
    1. (可選)解決沖突
    2. 查看分支合并信息
    $ git log --graph --pretty=oneline --abbrev-commit
    

遠(yuǎn)程倉(cāng)庫(kù)


  1. 創(chuàng)建
    $ git remote add origin git@github.com:michaelliao/learngit.git
    
  2. 推送
    /// 第一次推送沦零,-u 作用是將本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)origin 綁定
    $ git push -u origin master 
    
    /// 以后的推送祭隔,則不需要再次綁定了
    $ git push origin master
    
  3. 查看遠(yuǎn)程庫(kù)信息
    $ git remote  /// 遠(yuǎn)程庫(kù)名
    $ git remote -v ///詳細(xì)信息
    
  4. 查看遠(yuǎn)程分支
    $ git branch -a  ///查看所有分支(包括本地和遠(yuǎn)程倉(cāng)庫(kù))
    $ git branch 
    
  5. 刪除遠(yuǎn)程分支
    $ git branch -r -d origin/develop    /// 刪除遠(yuǎn)程分支develop
    $ git push origin :develop   ///刪除遠(yuǎn)程的develop分支
    

log 妙用


  1. git log --pretty=oneline:?jiǎn)涡胁榭串?dāng)前分支日志
  2. git log --graph --pretty=oneline:查看當(dāng)前分支的合并情況
  3. git log --graph --pretty=oneline --abbrev-commit:和命令2效果相似。

dev分支碼到一半路操,發(fā)現(xiàn)master分支的版本有bug疾渴,要馬上改


思路:dev的修改先保存起來(lái),然后切換到master分支屯仗,再打bug分支修復(fù)bug搞坝,修復(fù)成功并合并后,最終切回dev分支祭钉,并取回之前保存的dev分支的修改內(nèi)容瞄沙,繼續(xù)碼。
步驟

  1. 暫存dev工作現(xiàn)場(chǎng)
    $ git stash
    
  2. 切回master, 打bug修復(fù)分支慌核,修復(fù)并合并
    $ git checkout master
    $ git checkout -b bug-solve-101
    ////修復(fù)bug中距境。。垮卓。垫桂。
    $ git checkout master
    $ git merge --no-ff -m "bug 101修復(fù)成功" bug-solve-101
    
  3. 最終,切回dev分支粟按,并還原工作現(xiàn)場(chǎng)
    $ git stash pop   /// 還原現(xiàn)場(chǎng)诬滩,并清除存儲(chǔ)棧中的內(nèi)容
    /// $ git stash list /// 查看存儲(chǔ)棧中的工作現(xiàn)場(chǎng)列表
    /// $ git stash apply  ///只恢復(fù),不刪除棧
    /// $ git stash drop /// 刪除棧存儲(chǔ)區(qū)
    

fetch 和 pull 的區(qū)別


  • $ git fetch origin develop:只是拉取遠(yuǎn)程的develop分支的最新提交版本灭将,到本地的.git/refs/remotes 目錄【遠(yuǎn)程版本庫(kù)】中疼鸟,并沒(méi)有合并到本地分支,也就是本地分支仍然只有master庙曙,沒(méi)有develop.【本地版本庫(kù)目錄:.git/refs/heads
  • $ git pull origin develop:相當(dāng)于:git fetch origin develop+git merge develop; 獲取遠(yuǎn)程develop分支空镜,并將其合并到當(dāng)前你所在的本地分支。

讓本地分支追溯到遠(yuǎn)程某個(gè)分支


如果發(fā)現(xiàn),自己創(chuàng)建的本地分支pull不了吴攒,那么张抄,可能是本地分支沒(méi)有與遠(yuǎn)程分支建立關(guān)聯(lián),這時(shí):

git branch --set-upstream-to=origin/<branch> develop

就可以建立連接洼怔,之后署惯,就是各種push、pull和merge了镣隶!

Pull 不下來(lái)怎么辦极谊?


  • 如果發(fā)現(xiàn)是這種報(bào)錯(cuò):fatal: refusing to merge unrelated histories【在新建Ionic項(xiàng)目的時(shí)候經(jīng)常這樣】,那么矾缓,用這條語(yǔ)句來(lái)pull:
    git pull origin master --allow-unrelated-histories
    

git clone 指定目錄


如果我們不想每次先cd到那個(gè)目錄在進(jìn)行clone操作怀酷,那么,這句命令很有用:

git clone <git url> "C:\a\b"

其中:a表示指定目錄嗜闻,b表示你自定義的文件夾名蜕依,如:

>git clone https://github.com/androidjp/xxxxx.git "D:\aaa\bbb"

最終,會(huì)創(chuàng)建aaa\bbb目錄和文件夾琉雳,然后在內(nèi)部拉取所有代碼样眠。

Lag標(biāo)簽


  1. git tag <name>:新建一個(gè)標(biāo)簽,默認(rèn)為HEAD翠肘,也可以指定一個(gè)commit id檐束;
  2. git tag -a <tagname> -m "blablabla...":可以指定標(biāo)簽信息;
  3. git tag -s <tagname> -m "blablabla...":可以用PGP簽名標(biāo)簽束倍;
  4. git tag:可以查看所有標(biāo)簽
  5. git push origin <tagname>:可以推送一個(gè)本地標(biāo)簽被丧;
  6. git push origin --tags:可以推送全部未推送過(guò)的本地標(biāo)簽;
  7. git tag -d <tagname>:可以刪除一個(gè)本地標(biāo)簽绪妹;
  8. git push origin :refs/tags/<tagname>:可以刪除一個(gè)遠(yuǎn)程標(biāo)簽甥桂。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市邮旷,隨后出現(xiàn)的幾起案子黄选,更是在濱河造成了極大的恐慌,老刑警劉巖婶肩,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件办陷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡律歼,警方通過(guò)查閱死者的電腦和手機(jī)民镜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)险毁,“玉大人殃恒,你說(shuō)我怎么就攤上這事植旧∪杞遥” “怎么了离唐?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)问窃。 經(jīng)常有香客問(wèn)我亥鬓,道長(zhǎng),這世上最難降的妖魔是什么域庇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任嵌戈,我火速辦了婚禮,結(jié)果婚禮上听皿,老公的妹妹穿的比我還像新娘熟呛。我一直安慰自己,他們只是感情好尉姨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布庵朝。 她就那樣靜靜地躺著,像睡著了一般又厉。 火紅的嫁衣襯著肌膚如雪九府。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,443評(píng)論 1 302
  • 那天覆致,我揣著相機(jī)與錄音侄旬,去河邊找鬼。 笑死煌妈,一個(gè)胖子當(dāng)著我的面吹牛儡羔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播璧诵,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼汰蜘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了腮猖?” 一聲冷哼從身側(cè)響起鉴扫,我...
    開(kāi)封第一講書(shū)人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎澈缺,沒(méi)想到半個(gè)月后坪创,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡姐赡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年莱预,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片项滑。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡依沮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情危喉,我是刑警寧澤宋渔,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站辜限,受9級(jí)特大地震影響皇拣,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜薄嫡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一氧急、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧毫深,春花似錦吩坝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至鸳址,卻和暖如春瘩蚪,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稿黍。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工疹瘦, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人巡球。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓言沐,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親酣栈。 傳聞我的和親對(duì)象是個(gè)殘疾皇子险胰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git,從https:/...
    落魂灬閱讀 12,663評(píng)論 4 54
  • FMDB的下載地址: FMDB FMDB里面有三個(gè)基礎(chǔ)的類(lèi): 1.FMDatabase 實(shí)例化后用來(lái)操作數(shù)據(jù)庫(kù)矿筝,執(zhí)...
    烏拉拉zzZ閱讀 663評(píng)論 0 7
  • 這本書(shū)寫(xiě)了一些人和一些寫(xiě)給父母的書(shū)信起便。開(kāi)場(chǎng)白以——永遠(yuǎn)的夏娃開(kāi)始,一個(gè)三毛想了很久很久的題目窖维。為了一個(gè)有各種遭遇的...
    夏子墨0527閱讀 1,360評(píng)論 0 0