Git在工作中的小總結

Git-Pro

自己在工作中常用的git命令行奔滑!

<a name="basic">Git基本操作</a>

用戶信息

當我們要進行Git提交的時候宝穗,我們作為提交者要以什么姓名和電子郵件地址進行提交?

git config --global user.name "DefaultYuan"
git config --global user.email johndoe@example.com

查看配置信息

git config --list

上面命令配置好的用戶信息可以通過git config --list命令查看用戶名秩贰、郵箱、別名谐宙、remote地址等等!真是一覽無遺界弧!當然也可以到.git目錄下的查看config文件

從現(xiàn)有的倉庫克隆到本地

git clone https://github.com/DefaultYuan/Git-Pro.git A/B

以上命令是將現(xiàn)有的倉庫克隆到A目錄下的B文件夾里面凡蜻,如果后面沒有添加A/B就會默認新建一個名為Git-Pro文件夾,且將倉庫克隆到這個文件夾下面夹纫!

提交代碼到本地倉庫

當我們在本地修改了文件咽瓷,比如修改了README.md文件,我們首先查看狀態(tài)確定哪些文件當前處于什么狀態(tài)舰讹!

git status

該命令執(zhí)行完終端輸出如下:

On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

當前README.md文件是有做修改的茅姜,該文件還沒有添加到stage的,提示我們可以通過git add <file>來添加月匣,當然我們也可以通過git checkout -- <file>來撤銷本次做到修改钻洒,建議不要輕易這么干!后續(xù)我會講講相關撤銷操作锄开。

現(xiàn)在我們加入stage

git add README.md

如果我們現(xiàn)在要將本地所有修改的文件進行添加素标,可以用該命令:

git add .

最后,我們進行提交

git commit -m "fix 具體哪個功能"

如果本地我們改的內容有點多萍悴,涉及到修改多個模塊的代碼头遭,建議多次添加并提交寓免!

將本地代碼提交到遠程倉庫

繼上面的提交操作之后

我們先拉取一下遠程倉庫的更新內容

git fetch

接下來,我們就可以手動merge遠程倉庫的修改了

git merge

我們?yōu)榱俗屛覀兊奶峤挥涗洷容^美觀一些的話计维,在這里我們會用rebase去代替merge操作

git rebase

或者用pull來拉取代碼

git pull

fetchpull有啥區(qū)別呢袜香?

fetch從遠程倉庫抓取到本地之后不會自動merge操作,但pull會自動merge

最后我們進行push操作

git push

這樣我們就可以做到遠程倉庫和本地倉庫的同步了鲫惶!


Git進階

上面講的是一些Git基本操作蜈首。

接下來講講一些Git進階小技巧

提交技巧

當我們要將stage里的修改分多次提交到本地倉庫,也就是具體到哪個文件
git commit DefaultYuan.txt -m "fix 具體功能"
如果我們想查看要提交的內容與版本庫中的比較,然后進行提交
git commit -v
將工作區(qū)和stage中的所有修改的文件一次性提交到本地倉庫
git commit -a

這樣會默認使用 vi 添加描述,我們也可以在.git/configcoreeditor = vim指定編輯器

當然也可以使用-m選項直接添加提交信息

git commit -a -m "fix 具體功能"
有時候我們需要對上一次提交信息進行修改
git commit --amend

也可以后面添加參數-m做到修改

查看狀態(tài)

查看工作區(qū)中所有目錄下文件的變動
git status
比較工作區(qū)與暫存區(qū)的改動
git diff
添加參數--cached欠母,比較暫存區(qū)和版本庫之間的區(qū)別
git diff --cached
添加參數HEAD欢策,比較工作區(qū)、暫存區(qū)和版本庫之間的區(qū)別
git diff HEAD

HEAD關鍵字它指的是當前分支的最新提交赏淌,相當于一個指針,后續(xù)講到新建分支也會提到它

stash的使用

有時候我們在工作區(qū)進行開發(fā)并且不想提交的時候踩寇,這時我們又想pull最新代碼;或者又想切到另外一個分支上修改緊急bug的時候

git stash可以暫存當前的工作區(qū)內容

可以先暫存當前的工作區(qū)的內容
git stash

等我們切到另外分支修改完了bug之后猜敢,可以切回之前分支

然后恢復之前工作區(qū)的內容繼續(xù)開發(fā)
git stash pop
也可以查看stash的Git棧信息
git stash list

當我們的stash棧列表里面有很多姑荷,并且我們想要找到對應的版本號

并且將我們想要的版本號為stash@{2}的工作內容取出來
git stash apply stash@{2}
也可以查看版本號為stash@{2}的工作內容
git stash show stash@{2}

當我們的stash棧列表的工作內容都應用回來的時候

可以將棧清空
git stash clear

分支

分支在Git里面是比較廉價的盒延,我們在開發(fā)的時候可以在本地倉庫創(chuàng)建很多條分支

新建一條名字為dev的分支
git branch dev

這種創(chuàng)建方式會依然停留在當前分支

開發(fā)新功能缩擂、或者修改bug,我們會創(chuàng)建一條分支并切到新開分支上開發(fā)
git checkout -b dev_fixHot
也可以從當前分支新建一個dev分支添寺,指向指定commit
git branch dev f0299e2

f0299e2是隨便寫的胯盯,具體要以我們自己的commit

切換到指定分支
git checkout dev

分支其實也是指向某個commit的指針,HEAD也是一個指針计露,它指向當前工作目錄下的commit

因此checkout就是讓HEAD指向dev分支

刪除dev分支
git branch -d dev
強制刪除dev分支
git branch -D dev
將本地dev分支與dev_fixHot遠程分支建立追蹤關系
git branch --set-upstream dev origin/dev_fixHot
添加一個dev遠程分支
git push origin dev:dev
刪除dev遠程分支
git push origin :dev

或者

git push origin --delete dev
選擇一個commit,合并到當前分支
git cherry-pick f0299e2

合并分支rebasemerge

在工作中博脑,如果團隊開發(fā)同一個項目的人數特別多的時候,每個人都在自己的分支上開發(fā)

在開發(fā)過程中票罐,為了使提交記錄直觀叉趣,方便在一條分支上查看提交記錄,可以對分支進行衍合该押,一般是在做了一些小的修改之后會用它

將修改commit到本地分支上之后

當本地分支上有相對應的遠程分支疗杉,可以直接使用

git rebase

為了方便講解,origin/dev_homepageFix這個遠程分支是隨便寫的分支名

當這次commit要衍合到dev_homepageFix分支上時

git rebase origin/dev_homepageFix

最后就可以push跟遠程倉庫同步了

當我們到項目接近尾聲的時候蚕礼,需要將各自的分支都合并到dev分支上去

先抓取最新倉庫更新

git fetch

然后切到dev分支上

git checkout dev

再分別合并各個分支烟具,這里以dev_homepageFix分支為例

git merge origin/dev_homepageFix

撤銷操作

當我們想去整理我的提交,或者是把不該這次提交的修改提交了奠蹬,我們可以對修改進行撤銷朝聋,或者對提交進行撤銷

恢復暫存區(qū)的所有文件到工作區(qū)
git reset HEAD
恢復暫存區(qū)的指定的某個文件到工作區(qū)
git reset HEAD README.md

我們做了一些修改,然后覺得自己做錯了囤躁,不想提交

可以重置暫存區(qū)冀痕、工作區(qū)荔睹,這樣就能與上次提交保持一致,建議不要輕易這么做言蛇!
git reset --hard

當我們想重新整理提交的時候应媚,比如說將上兩次的提交整理到一次提交,我們可以重置到上兩次的上次提交commit

可以重置到指定的commit,并重置了暫存區(qū),但工作區(qū)是不變的
git reset 2126dce

這種情況也會引發(fā)另外一個問題猜极,當我們本地倉庫與遠程倉庫一致的時候中姜,然后我們重置,就需要用到pushforce來進行強推跟伏,這是我們不想操作的丢胚,后續(xù)我會講解一下強推的小建議!

新建一個commit受扳,用來撤銷指定commit携龟,后者所有變化都會被前者抵消,并應用到當前分支

我們也是不要輕易這么去做勘高!

git revert 2126dce

起別名

當我們有比較常用的命令行用的比較頻繁峡蟋,但是我們又覺得完整把它們敲出來費事

可以在 ~/.gitconfig 文件里面進行設置別名,添加alias
[alias]
ft = fetch
ck = checkout
st = status
br = branch
rb = rebase
lg = log

然后試一下git st就管用了!

標簽的相關操作

標簽可以針對某一時間點的版本做標記华望,常用于版本發(fā)布

列出標簽
git tag
創(chuàng)建附注標簽
git tag -a v0.0.1-pro -m "pro發(fā)版"
切換到標簽
git checkout v0.0.1-pro
查看標簽的版本信息
git show v0.0.1-pro
刪除標簽
git tag -d v0.0.1-pro
給指定的commit打標簽
git tag -a v0.0.1-pro 9fbc3dd
將v0.0.1-pro標簽提交到git服務器
git push origin v0.0.1-pro
將本地所有標簽一次性提交到git服務器
git push origin –tags

找回Git中丟失的Commit

在使用Git的過程中蕊蝗,有時候會因為一些誤操作,比如reset赖舟、rebase蓬戚、merge等,同時自己的Commmit記錄也消失了。
不用慌宾抓,我們在Git上做的任何操作都只是在原來之前的操作上做修改子漩,并且會被記錄下來保存,也就是說無論你做了什么石洗,對于Git來說都可以進行回滾操作幢泼。

找回Commit
這里以git reset --hard為例,如果我們這樣操作讲衫,提交會消失缕棵。
這時我們可以使用reflog查看一下
git reflog
此時會出現(xiàn)這樣

99abc5a HEAD@{1}: commit: do something

我們要找回我們這個commit,只需要做如下操作:
git reset --hard 99abc5a
針對不是git reset --hard誤操作造成的丟失commit,我們可以使用git cherry-pick 99abc5a來找回代碼焦人,核心是我們需要找回丟失的commit

微博:DefaultYuan
最新更新請戳這里

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末挥吵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子花椭,更是在濱河造成了極大的恐慌忽匈,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矿辽,死亡現(xiàn)場離奇詭異丹允,居然都是意外死亡郭厌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門雕蔽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來折柠,“玉大人,你說我怎么就攤上這事批狐∩仁郏” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵嚣艇,是天一觀的道長承冰。 經常有香客問我,道長食零,這世上最難降的妖魔是什么困乒? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮贰谣,結果婚禮上娜搂,老公的妹妹穿的比我還像新娘。我一直安慰自己吱抚,他們只是感情好百宇,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著频伤,像睡著了一般恳谎。 火紅的嫁衣襯著肌膚如雪芝此。 梳的紋絲不亂的頭發(fā)上憋肖,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天,我揣著相機與錄音婚苹,去河邊找鬼岸更。 笑死,一個胖子當著我的面吹牛膊升,可吹牛的內容都是我干的怎炊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼廓译,長吁一口氣:“原來是場噩夢啊……” “哼评肆!你這毒婦竟也來了?” 一聲冷哼從身側響起非区,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瓜挽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后征绸,有當地人在樹林里發(fā)現(xiàn)了一具尸體久橙,經...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡俄占,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了淆衷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缸榄。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖祝拯,靈堂內的尸體忽然破棺而出甚带,到底是詐尸還是另有隱情,我是刑警寧澤佳头,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布欲低,位于F島的核電站,受9級特大地震影響畜晰,放射性物質發(fā)生泄漏砾莱。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一凄鼻、第九天 我趴在偏房一處隱蔽的房頂上張望腊瑟。 院中可真熱鬧,春花似錦块蚌、人聲如沸闰非。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽财松。三九已至,卻和暖如春纱控,著一層夾襖步出監(jiān)牢的瞬間辆毡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工甜害, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留舶掖,地道東北人。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓尔店,卻偏偏與公主長得像眨攘,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子嚣州,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359

推薦閱讀更多精彩內容

  • 1.git的安裝 1.1 在Windows上安裝Git msysgit是Windows版的Git鲫售,從https:/...
    落魂灬閱讀 12,668評論 4 54
  • Git是目前最流行的版本管理系統(tǒng),也是最先進的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,717評論 1 17
  • 昨天我去體檢了该肴, 今年單位的例行體檢比從前多了一個項目: 驗便情竹。 對這突如其來的福利, 大家好像都沒什么準備沙庐, 多...
    石小露閱讀 1,006評論 0 3
  • 在后臺底扳,經常會收到如下這些留言: A先生問,扭腰時贡耽,為什么會響衷模? B女士說,上下樓梯時蒲赂,膝蓋咔咔響阱冶,是怎么回事? ...
    WELL運動康復閱讀 872評論 0 0
  • 我拖著行李箱走出來滥嘴,一眼就看見了人群中張望的你木蹬,突然你望向我,露出了孩子般的笑容若皱,還不停的揮手示意我镊叁。 不知道為什...
    rainbow姍閱讀 104評論 0 0