git相關操作

github相關概念

image.png

這里要區(qū)分git和github
git操作是屬于左半部分皿桑,github屬于上面部分
git是自己本地倉庫和自己遠程倉庫的操作
github是自己倉庫和別人倉庫(fork和被fork倉庫)之間操作
https://github.com/812865052/learngit.git是倉庫的https地址
git@github.com:812865052/learngit.git是倉庫的ssh地址

Joe和其它貢獻者已經(jīng)對這個項目做了一些修改毫目,而你將在他們的修改的基礎上,還要再做一些修改诲侮。在你開始之前镀虐,你最好"同步你的fork",以確保在最新的復制版本里工作沟绪。下面是你要做的:


image.png

git安裝

Linux:sudo apt-get install git
其他系統(tǒng)安裝

本地git配置

首先要在某個文件夾(空的或者已經(jīng)有文件)內(nèi)執(zhí)行:
git init
創(chuàng)建了一個git倉庫
然后設置git屬性
git config --global user.name "yefeimac" #可以不加--global
git config --global user.email "your email address" #可以不加--global
git config --global core.sshCommand "ssh -i /Users/yefei/.ssh/id_rsa" #這里設置git使用哪個密鑰刮便,非常好用
git配置文件地址: macOS and Linux: /Users/<username>/.gitconfig or ~/.gitconfig

配置git的ssh

在用ssh之前,你需要
先生成公鑰私鑰绽慈,然后將公鑰加入到github的setting中恨旱,按照教程配置~/yefei/.ssh/config
也可以參考中文教程
它的大概過程:
1.設置本地的ssh key,打開git bash,輸入命令:
ssh-keygen -t rsa -C "XXXXXX@XXXX.com" 其中雙引號中是你注冊github時用的郵箱坝疼。
一直回車搜贤,選擇默認路徑,和空密碼裙士。最后會在默認路徑下生成.ssh文件夾入客,打開.ssh里面有兩個文件,打開id_rsa.pub復制里面的密鑰。
2.打開github,選擇settings
點擊ssh and gpg keys,選擇ssh keys 右邊的new ssh key桌硫。出現(xiàn)下面綠色框的內(nèi)容夭咬,填寫標題,并將自己剛才復制的密鑰粘貼到key中铆隘。最后點擊add ssh key.
titile隨便取名字卓舵,一般讓你自己明白是哪個電腦,比如yefeiMBP
3.查看是否成功膀钠。在git bash中輸入命令:(注意是git bash掏湾,不是win自帶的cmd中輸入命令)
ssh -T git@github.com
會提示,是否continue肿嘲,輸入yes融击。后就會看到:
Warning:Permanently added 'github.com,207.97.227.239' (RSA) to the list of known hosts.
  Hi zhangsiyao11! You've successfully authenticated, but GitHub does not provide shell access.
這樣就成功了,不用理會warning雳窟。
同理尊浪,你的這個ssh既可以加到github上,也可以加到公司的gitlab里

新建遠程倉庫流程

  • 配置GitHub倉庫
    在github上新建一個倉庫具體見下圖


    image.png

本地代碼和遠程倉庫關聯(lián)

1封救、首先執(zhí)行類似與git remote add orgin https://github.com/812865052/newstock.git
2拇涤、執(zhí)行git pull --rebase origin master (解決failed to push some refs to git的辦法)
3、git push origin master

已有github倉庫

  • 已有github倉庫誉结,從遠程倉庫下載代碼
    執(zhí)行前面的本地新倉庫配置步驟
  • 常規(guī)的本地下載鹅士、提交和push
    從遠程倉庫下載新的倉庫,可以使用
    https git clone:
    git clone https://github.com/project/repo.git

ssh git clone:
git clone git@github.com:project/repo.git

可以直接clone特定分支的代碼
git clone 分支名 地址

本地倉庫修改后惩坑,如何同步:
1掉盅、本地修改上傳:
git add 文件名
git commit -m "comment"
或者刪除文件
git rm 文件名/文件夾(前提是該文件或者文件夾在git所在目錄里面)
然后提交 git commit -m "comment"
git push origin(reposity name) master
2、本地同步遠程倉庫代碼:
git pull origin master(好像還可以用fetch旭贬,更安全怔接,可以后面研究下)

倉庫

查看遠程倉庫
git remote -v

新建倉庫
git remote add gitname https://github.com/812865052/newstock.git

本地倉庫改名
如果不想使用origin這個名字,可以用 git remote rename origin newname改名稀轨。
提交的時候,就變成了git push newname master

若大批量 增岸军、刪奋刽、改文件,顯然一個個添加或刪除是不可取的艰赞,以下命令可快捷操作暫存區(qū)(建議練習使用佣谐,加深對以下幾個命令的理解):

git add -A 暫存區(qū)與工作區(qū)保持一致(stages All)

git add . 暫存區(qū)新建文件及更改文件(stages new and modified, without deleted)

git add -u 暫存區(qū)刪除文件及更改文件(stages modified and deleted, without new)

單個文件的修改記錄

  1. git log filename
    可以看到fileName相關的commit記錄
  2. git log -p filenam
    可以顯示每次提交的diff
  3. 只看某次提交中的某個文件變化,可以直接加上fileName
    git show c5e69804bbd9725b5dece57f8cbece4a96b9f80b filename

diff查看

diff各個版本區(qū)別
工作目錄 vs 暫存區(qū)
git diff filename
意義:查看文件在工作目錄與暫存區(qū)的差別方妖。如果還沒 add 進暫存區(qū)狭魂,則查看文件自身修改前后的差別。
也可查看和另一分支的區(qū)別。$ git diff branch filename

暫存區(qū) vs Git倉庫
git diff --cached filename
意義:表示查看已經(jīng) add 進暫存區(qū)但是尚未 commit 的內(nèi)容同最新一次 commit 時的內(nèi)容的差異雌澄。
也可以指定倉庫版本:git diff --cached commit filename

工作目錄 vs Git倉庫
git diff commit filename
意義:查看工作目錄同Git倉庫指定 commit 的內(nèi)容的差異斋泄。
commit=HEAD 時:查看工作目錄同最近一次 commit 的內(nèi)容的差異。

Git倉庫 vs Git倉庫
git diff commit commit
意義:Git倉庫任意兩次 commit 之間的差別镐牺。

本地分支版本回退的方法

首先炫掐,使用 git log 命令查看提交歷史,找到你想要回退的版本的提交哈希值(commit hash)或者提交消息睬涧。

運行以下命令回退到指定版本:

git reset --hard <commit>
將 <commit> 替換為你要回退到的版本的提交哈希值或者提交消息募胃。

例如,如果要回退到提交哈希值為 abc123 的版本畦浓,命令將如下所示:

git reset --hard abc123
注意:--hard 參數(shù)將會刪除回退版本后的所有更改痹束,包括未提交的更改,請確保在執(zhí)行此命令之前備份和保存你的工作讶请。

執(zhí)行回退命令后参袱,Git 將會將當前分支指向指定的版本,并且丟棄指定版本后的所有提交秽梅。

自己的遠程分支版本回退的方法

在回退到指定版本后抹蚀,使用 git log 命令確認你的本地倉庫已經(jīng)回退到了正確的版本。

如果你之前已經(jīng)將本地倉庫與遠程倉庫關聯(lián)企垦,可以直接使用以下命令將回退推送到遠程倉庫:

git push -f origin <branch_name>
將 <branch_name> 替換為你要推送的分支的名稱环壤。

注意:由于回退操作改變了 Git 倉庫的歷史記錄,使用 -f 參數(shù)強制推送是必要的钞诡。請謹慎使用此命令郑现,并確保你具有足夠的權限來推送更改。

注意:本地分支回滾后荧降,版本將落后遠程分支接箫,必須使用強制推送覆蓋遠程分支,否則無法推送到遠程分支
如果提示GitLab: You are not allowed to force push code to a protected branch on this project.則需要在gitlab setting里面的repository里面找到protect branch朵诫,要打開允許force操作


image.png

本地同步遠程倉庫修改

想保留本地修改辛友,同時把遠程代碼更新到本地的話,最好的命令是git pull --rebase剪返,只用git pull會多出很多無用的commit信息废累。詳細信息參考git pull --rebase這篇
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
或者是用git fetch upstream 然后git merge upstream/master 參考git pull 和 git fetch的區(qū)別?

如何同步不同名字的分支
The upstream branch of your current branch does not match
the name of your current branch. To push to the upstream branch
on the remote, use

git push gerrit HEAD:jacoco

To push to the branch of the same name on the remote, use

git push gerrit v4.7.0

分支

查看本地和遠程分支
git branch -a

查看本地分支
git branch

查看所有遠程分支
git branch -r

創(chuàng)建分支
git branch test

切換分支
git checkout test

創(chuàng)建并且切換分支
git checkout -b test
git checkout -b 本地分支名x origin/遠程分支名x
使用該方式會在本地新建分支x脱盲,并自動切換到該本地分支x月培。
采用此種方法建立的本地分支會和遠程分支建立映射關系逗堵。
然后直接git push test(新建的本地分支)

git fetch origin 遠程分支名x:本地分支名x
使用該方式會在本地新建分支x足删,但是不會自動切換到該本地分支x眨层,需要手動checkout匣距。
采用此種方法建立的本地分支不會和遠程分支建立映射關系。

重命名分支
在當前分支執(zhí)行git branch -m new-branch-name哎壳,則把當前分支重新命名為new-branch-name

必須是相同名字的分支才能push毅待,否則會報error: src refspec xxx does not match any / error: failed to push some refs to

把master代碼合到當前分支
1.切換到主分支
git checkout master
2.使用git pull把master代碼拉到本地
git pull upstream master
3.切換到自己的分支——>(XXX)
git checkout XXX
4.使用merge把主分支的代碼合并到自己的分支
git merge master
注意:合并時有可能會有沖突,解決完沖突才能push
5.最后push耳峦,你分支的代碼就和主分支的一樣了
git push origin xxx

刪除本地分支
git branch -d xxxxx

查看本地分支與遠程分支的映射關系
git branch -vv (注意是兩個v)


映射關系

第一行恩静,本地的jacoco分支,沒有和遠程分支關聯(lián)
第二行蹲坷,本地的master分支驶乾,和遠程的origin/master分支關聯(lián)
第三行,本地的v4.7.0分支循签,和遠程的gerrit/jacoco分支關聯(lián)
其中级乐,遠程名字和ahead和behind的意思:
Ahead is the number of commits on this branch that do not exist on the base branch. Behind is the number of commits on the base branch that do not exist on this branch.

當前分支與取消和遠程分支關聯(lián)
git branch --unset-upstream

當前分支與和遠程分支關聯(lián)
git branch -u origin/addFile
或者使用命令:
git branch --set-upstream-to origin/addFile

fork別人項目后,先同步更新別人的提交县匠,然后把自己的代碼merge到原項目

git remote -v
git remote add upstream git@github.com:xxx/xxx.git(這里還可以填https的地址) 把原項目加入到upstream
如果填錯地址风科,想刪除upstream,用git remote rm upstream
git fetch upstream 從原項目拉取最新代碼
git merge upstream/master 將源代碼最新代碼合到fork分支
或者直接拉推特定分支代碼到當前分支
git pull upstream Financial-User
git pull origin Financial-User
git push origin Financial-User

如果上一步出錯乞旦,提示:
error: Your local changes to the following files would be overwritten by merge:
Please, commit your changes or stash them before you can merge.
有兩種解決方法贼穆,第一, 先commit本地修改兰粉,然后合并在push到遠程自己的項目故痊。
第二,先執(zhí)行git stash玖姑,然后在執(zhí)行git merge upstream/master愕秫,最后執(zhí)行git stash pop,把自己的修改又展示出來焰络。

git push 把代碼上傳到fork項目
最后就是在網(wǎng)頁發(fā)起pull request請求
另外一種方法就是github網(wǎng)頁操作戴甩,具體步驟,參考這篇文章

同步master代碼到feature分支

#1 創(chuàng)建功能分支 
(master) git checkout -b feature

#2 功能迭代 
(feature) git commit ...

#3 合并最新主干代碼 
(feature) git checkout master 
(master) git pull orgin master
(master) git checkout feature  ####把feature合并到master
(feature) git merge master

gitlab常見操作

git pull upstream master  本地分支拉取最新master代碼
git branch -a
git checkout xxx
git remote -v
git pull upstream Financial-User

忽略文件設置
.gitignore
文件位置就在項目根目錄

exclude
git 還提供了另一種 exclude 的方式來完成同樣的忽略
不同的是 .gitignore 這個文件本身會push到庫中去闪彼。保存的是公共的需要排除的文件甜孤。
而exclude 是自己本地忽略的設置,不會影響到其他人备蚓,也不會提交到庫中去课蔬。

exclude 文件所在位置
項目根目錄/.git/info/exclude

場景1-切到新分支看開發(fā)代碼

git fetch -這里會把所有新分支拉下來 否則在 git branch -r看不到開發(fā)新建的分支
git check out 分支名 就自動切到新分支了 代碼也是分支代碼
如果報錯

error: The following untracked working tree files would be overwritten by checkout:
        remit-manager.iml
Please move or remove them before you switch branches.
Aborting

就執(zhí)行git clean -df remit-manager.iml
然后再執(zhí)行checkout

查看沖突文件列表
git diff --name-only --diff-filter=U

【Git】pull 分支報錯 fatal: Need to specify how to reconcile divergent branches

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市郊尝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌战惊,老刑警劉巖流昏,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扎即,死亡現(xiàn)場離奇詭異,居然都是意外死亡况凉,警方通過查閱死者的電腦和手機谚鄙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來刁绒,“玉大人闷营,你說我怎么就攤上這事≈校” “怎么了傻盟?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長嫂丙。 經(jīng)常有香客問我娘赴,道長,這世上最難降的妖魔是什么跟啤? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任诽表,我火速辦了婚禮,結果婚禮上隅肥,老公的妹妹穿的比我還像新娘竿奏。我一直安慰自己,他們只是感情好腥放,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布泛啸。 她就那樣靜靜地躺著,像睡著了一般捉片。 火紅的嫁衣襯著肌膚如雪平痰。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天伍纫,我揣著相機與錄音宗雇,去河邊找鬼。 笑死莹规,一個胖子當著我的面吹牛赔蒲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播良漱,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼舞虱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了母市?” 一聲冷哼從身側響起矾兜,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎患久,沒想到半個月后椅寺,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浑槽,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年返帕,在試婚紗的時候發(fā)現(xiàn)自己被綠了桐玻。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡荆萤,死狀恐怖镊靴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情链韭,我是刑警寧澤偏竟,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站梧油,受9級特大地震影響苫耸,放射性物質發(fā)生泄漏。R本人自食惡果不足惜儡陨,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一褪子、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧骗村,春花似錦嫌褪、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琅拌,卻和暖如春缨伊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背进宝。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工刻坊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人党晋。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓谭胚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親未玻。 傳聞我的和親對象是個殘疾皇子灾而,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

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

  • 1. 安裝 Github 查看是否安裝git: $ git config --global user.name "...
    Albert_Sun閱讀 13,632評論 9 163
  • git branch 查看本地所有分支 git status 查看當前狀態(tài) git commit 提交 git b...
    猿萬閱讀 5,029評論 1 45
  • 本文作者陳云峰,轉載請注明扳剿。 這篇文章記錄個人常用的一些命令旁趟,和記不住的一些命令,轉載了并不斷更新庇绽。 Git官網(wǎng) ...
    陳云峰閱讀 2,805評論 0 24
  • 1轻庆,查看所有遠程分支:%git branch -r 2, 拉取遠程分支并創(chuàng)建本地分支git checkout -...
    will666閱讀 2,055評論 0 18
  • 8月15日癣猾,周三敛劝,晴余爆。假期已經(jīng)過去一多半了,想養(yǎng)成的好習慣沒養(yǎng)成夸盟,想改掉的壞習慣沒改掉蛾方。唉,教育孩子真是難吧仙隆桩砰!最近...
    國一媽媽閱讀 175評論 0 0