Git操作

git用于管理代碼的不同版本,能夠很快恢復到過去時間段的某個狀態(tài)。同時在多人合作共同開發(fā)中伏恐,對于代碼的修改與發(fā)送,都非常的輕快便捷栓霜,不同像在QQ群之間相互傳代碼的zip壓縮包那樣麻煩翠桦;不會疑惑其他人對代碼做了哪些修改。Github/Gitee是運用互聯(lián)網(wǎng)的思維胳蛮,將代碼存儲在上面销凑,通過互聯(lián)網(wǎng),我們才能夠相互將代碼分享仅炊。

而對于如何使用git來管理代碼斗幼,這還需要熟悉一些原理與git命令操作,這樣才會得心應(yīng)手抚垄。

Git功能

  • Tracking multiple files together
  • Tracking change
  • Tracking history version (tracking 跟蹤)

本機離線操作

在自己的電腦上管理代碼local,其中涉及到三個空間概念: working directory存儲在硬盤上的普通文件,staging area與add有關(guān)和repository與commit有關(guān)

concept map

git -version

查看git的版本

git log

查看提交的日志蜕窿,其中那一串數(shù)字是commitID指向每個歷史版本,按照時間從現(xiàn)在往之前推谋逻。q退出。

git log --graph --oneline

查看分支合并情況,類似圖形界面

也可查看專門的分支

git log --graph --oneline master  分支名稱

git diff

git diff commitID(之前) commitID(之后)

比較在repository中兩個版本的不同渠羞,如取3aa08b92180bea3f594340f87d0d51e4a99edd87d07738fb19f551ea8d767f9fde6c4b702d0923ef進行比較斤贰,通過顏色或(-,+)等信息觀察變化次询,可以只輸入前面四個字符即可

image.png

表示新添了內(nèi)容,該內(nèi)容是新信息

git diff

場景: 該文件已經(jīng)通過add加入到了staging area但是未加入到repository,而此時你去處理別的事情了(比如上廁所)瓷叫,回來的時候你想知道staging area的文件是否是最新的文件屯吊,因為你可能忘了,將該文件加入staging area后你是否又修改了該文件摹菠。

比較的是同文件在working area與staging area的狀態(tài)

git diff --staged

比較的是staging area與repository中最新的”快照”

git checkout

git checkout master

回到主分支

git checkout 分支名稱

該分支可以是本地的分支盒卸,也可以是遠程的分支

切換到該分支

git checkout commitID

access old versions of files.可以回到這個commitID指向的當時版本。使用它次氨,我們可以查看bug在那一次提交引入的蔽介。

git init

將一個文件夾初始化為一個 git repository(git 倉庫)

git status

查看當前的文件狀態(tài),是否是添加到repository中還是在staging area狀態(tài)

git add

將文件加入到staging area準備提交到本地的repository

git add .   表示將全部文件添加到staging area中
git add 文件名  只將該文件加入

git commit

A commit is a snapshot of git repository(快照)
提交commit會記錄打log日志中煮寡,為了日后方便通過日志來跟蹤代碼的更改虹蓄,應(yīng)該遵循的原則是:

It‘s make one commit per logical change and give each commit a good message.(每跟換一次邏輯,進行一次提交)

git commit直接回車會打開sublime編輯器幸撕,進行更加詳細的信息編輯(前提是需要配置sublime)

也可以使用git commit -m "message"在命令行快速寫入信息

配置sublime

切換到Home目錄下

cd ~

在Home路徑下創(chuàng)建.bash_profile文件,在文件中添加薇组,sublime的安裝路徑,注意轉(zhuǎn)義

alias subl="C:/Program\ Files/Sublime\ Text\ 3/sublime_text.exe"

以后就可以在bash下使用subl 文件名來打開文件進行編輯

git branch

git branch

查看當前有哪些分支

git branch 分支名稱

創(chuàng)建該分支

為什么創(chuàng)建分支

比如開發(fā)一個游戲正版的難度是3星坐儿,但是你覺得太難律胀,于是想改代碼實現(xiàn)一個2星級別的,但是正式版本是3星貌矿,你能讓正式版本變成2星炭菌,于是你需要在這個基礎(chǔ)上開一個分支,在該分支上你可以自己改寫代碼而不用影響主支master的代碼逛漫。換而言之黑低,你可以在分支上干自己想干的事,大膽的更改代碼尽楔,而不用擔心影響主分支master

git branch -d 分支名稱

刪除分支

git merge

合并分支投储,將兩個分支上的代碼,合并整合到一個分支上阔馋,其中不可避免的時conflict(沖突)

git merge branch1 branch2

將分支branch2合并到branch1
相當于 git checkout branch1 然后 git merge branch2

git merge --abort

取消合并

沖突問題

當沖突發(fā)生時玛荞,查看發(fā)生沖突的文件,這時候兩個分支都是對原來的狀態(tài)進行了修改呕寝,需要打開文件進行改寫勋眯。如:

打開subl hello.txt文件,處理沖突:

<<<<<<< HEAD     表示HEAD指向的當前分支,此時為: different-oil
different information.




||||||| merged common ancestors   表示原始的內(nèi)容客蹋,此時表示原來是空的



=======
master money
>>>>>>> master            表示master分支改動的地方

以上信息表示塞蹭,master與different-oil都對原來的hello.txt狀態(tài)進行了內(nèi)容的增添,所以我們處理成這樣,將兩個分支添加的內(nèi)容都添加進來讶坯。

different information.

master money
git show commitID

因為兩個分支合并后番电,commit的時間是交錯的,要想查看這個commit的快照與在合并之前的分支上的前一個commit快照的對比辆琅,這個命令可以做到漱办。

compare a commit to its parent

Fast-forward-Merges

merging into is an ancestor of the branch that you're merging from

Github與本地local

Concept Map

SSH Key

Gitee(碼云)、Github同時配置ssh key

在 ~/.ssh目錄下
$ ssh-keygen -t rsa -C "xxxxxxx@qq.com" -f "github_id_rsa"
$ ssh-keygen -t rsa -C "xxxxxxx@qq.com" -f "gitee_id_rsa"
ssh -T git@gitee.com
ssh -T git@github.com

git remote

git remote

顯示本地倉庫與遠程Github倉庫上的連接

git remote -v 顯示詳細信息 v指verbose

git remote add origin git@...

將自己本地倉庫與github倉庫關(guān)聯(lián)起來婉烟。(在github上新建一個repository最好勾選上README.md這樣會產(chǎn)生第一次提交娩井,然后在本地倉庫執(zhí)行該命令)注意與git clone的區(qū)別

關(guān)聯(lián)之后就可以使用 git push origin mastergit push origin 分支 往github上提交文件了。(前提是要分配好SSH Key密鑰) 其中origin代表遠程

git remote add

git clone git@...

將github上的倉庫克隆下來似袁,作為本地的倉庫洞辣。

git pull

當遠程的Github倉庫的內(nèi)容改變時。
拉取Github上的代碼與本地倉庫的代碼進行合并昙衅。

如果倉庫只有自己一個人使用扬霜,那么在線上即Github上更改了某個文件,此時就需要git pull origin master遠程的代碼下來绒尊,進行合并畜挥,解決沖突。更常見的情況是婴谱,多人向一個倉庫貢獻代碼蟹但,此時在你就需要pull遠程,在本地解決沖突后谭羔,在pull request到貢獻的倉庫华糖。

git pull origin master 相當于 依次執(zhí)行了 git fetch origingit merge master origin/master

fork

這是在github通過fork其他人的倉庫,將該倉庫復制到自己github上的倉庫中瘟裸。

fork & clone & branch之間的區(qū)別

pull request

這個是在github上操作的客叉,表示向fork的項目貢獻代碼。如: 在自己本地倉庫(clone的fork的那個倉庫)中創(chuàng)建了一個分支话告,在該分支上我們進行代碼修改兼搏,然后將分支提交到我們fork的到自己github的倉庫,然后在自己的github上的這個倉庫上進行pull request.

當我們進行pull request后沙郭,fork的原來的項目的主人會受到信息佛呻,然后查看你pull request過去的版本是否符合要求,然后決定是否合并到他的項目master中病线。

pull request沖突

如:
1) 在自己的分支上修改吓著,pull request到fork的原生項目時,發(fā)現(xiàn)有沖突
2) 在自己本地倉庫中切換到master主分支鲤嫡,然后git pull拉取遠程fork的倉庫的master,因為我們修改代碼都是在其他分支上绑莺,master主分支與遠程的master合并時是Fast-forward merges,一般不會有沖突暖眼。

git pull 遠程fork的SSH地址

或者

git remote add upstream 遠程fork的SSH地址       //這個只執(zhí)行一次就好
git pull upstream master                //以后再拉取遠程fork倉庫的代碼時,就執(zhí)行這個即可

3)將master更新git push orgin master到自己github的倉庫
4)切換到分支纺裁,與master進行合并诫肠,解決沖突,在提交到自己的倉庫对扶,進行pull request

各個空間的改變

Courses

Problem

git pull

Problem-1

fatal: refusing to merge unrelated histories

Solved

git pull origin master --allow-unrelated-histories

Problem-2

There is no tracking information for the current branch.
    Please specify which branch you want to merge with.
    See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

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

Solved

git pull origin master
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末区赵,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浪南,更是在濱河造成了極大的恐慌,老刑警劉巖漱受,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件络凿,死亡現(xiàn)場離奇詭異,居然都是意外死亡昂羡,警方通過查閱死者的電腦和手機絮记,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來虐先,“玉大人怨愤,你說我怎么就攤上這事∮寂” “怎么了撰洗?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長腐芍。 經(jīng)常有香客問我差导,道長,這世上最難降的妖魔是什么猪勇? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任设褐,我火速辦了婚禮,結(jié)果婚禮上泣刹,老公的妹妹穿的比我還像新娘助析。我一直安慰自己,他們只是感情好椅您,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布外冀。 她就那樣靜靜地躺著,像睡著了一般襟沮。 火紅的嫁衣襯著肌膚如雪锥惋。 梳的紋絲不亂的頭發(fā)上昌腰,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音膀跌,去河邊找鬼遭商。 笑死,一個胖子當著我的面吹牛捅伤,可吹牛的內(nèi)容都是我干的劫流。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼丛忆,長吁一口氣:“原來是場噩夢啊……” “哼祠汇!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起熄诡,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤可很,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凰浮,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體我抠,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年袜茧,在試婚紗的時候發(fā)現(xiàn)自己被綠了菜拓。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡笛厦,死狀恐怖纳鼎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情裳凸,我是刑警寧澤贱鄙,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站登舞,受9級特大地震影響贰逾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜菠秒,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一疙剑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧践叠,春花似錦言缤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至弄捕,卻和暖如春僻孝,著一層夾襖步出監(jiān)牢的瞬間导帝,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工穿铆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留您单,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓荞雏,卻偏偏與公主長得像虐秦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凤优,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348