git操作 如何提出你的第乙個PR

2021-09-25 22:23:37 字數 2738 閱讀 5967

距離我提出我的第乙個pr,已經過去乙個月了,雖然也有許多類似的文章,但是我還是想做乙個自己的總結。

提pr是乙個程式設計師必備的技能,曾經,我以為只有參與開源專案的人需要這項技能。直到我進入公司,才知道,github不僅有開源專案,它還有私人倉庫啊!所以公司的商業專案也可以放在github上,使用git進行嚴格的版本控制。

好了,廢話不多說,我要開始總結了!

1、首先,將你要修改的專案fock到自己的github倉庫。

2、開啟你的ide,使用git clone命令將專案轉殖到本地。

3、使用git checkout -b #1000命令,新建乙個名為#1000的分支,並切換到這個分支下。#1000的名字一般是對應這個分           支要解決的問題的,比如jira上的issue號。

4、現在已經位於#1000分支下了,就可以放心開展工作了。因為你所有的修改都會只在這個分支下,不會影響到其他的分     支。首先要明白git的工作區和暫存區概念,工作區就是你本地當前的修改,對於工作區的修改,使用git add命令可以將其新增到暫存區,新增到暫存區以後,你再在工作區修改這個檔案就不會影響暫存區的內容,當然,你也可以再次使用git add命令將工作區第二次的修改再次新增到暫存區。git add .是將所有工作區檔案都新增到暫存區,git add filename是將指定檔案filename新增到暫存區。git status可以檢視工作區和暫存區檔案狀態。

5、把所有準備提交的修改都新增到暫存區以後,就可以使用commit命令了。git commit -m 『massage』會將當前暫存區的檔案提交到本地倉庫,其中message的內容需要提供這個commit的資訊。這個操作之後就可以在日誌記錄裡面看到你的commit了,git log可以檢視日誌記錄。當然,ide也有log的視覺化記錄。

7、確認commit無誤,使用git push命令將當前分支推送到自己的遠端倉庫,因為本地倉庫與自己clone的倉庫之間是追蹤關係的,git push會預設推送到自己的遠端倉庫。但是如果分支只是在本地建立的,遠端倉庫不存在這個分支,那麼就需要使用git push --set-upstream origin #1000,這樣會在遠端倉庫建立#1000分支,並將其與本地#1000分支關聯,將本地#1000分支的commit push到遠端。下次如果還是在這個分支做什麼改動需要提交commit,就可以直接使用git push進行推送。

8、推送到遠端倉庫以後,就可以登入自己的github檢視,在對應分支下面會有commit提醒,你可以選擇建立pr,將自己倉庫的分支提交到被fock倉庫的master分支,一般都是提交到master分支的。如果pr review通過了,你的pr就會被merge到master分支,你就成為這個專案的contributor啦!

9、以上步驟,是不是看起來很簡單?但是!作為乙個新手,怎麼可能每一步都如此順利。不想要工作區發生的修改了怎麼辦?想丟棄暫存區的修改怎麼辦?commit提交了想撤回怎麼辦?commit不但提交了還push到了遠端倉庫又想撤回怎麼辦?放心,只要pr沒有發出去,你所有的操作都可以被撤回。

9.1 撤回工作區修改。

git checkout -- filename

9.2 撤回暫存區修改。

git reset filename,這個命令可以將暫存區檔案撤回到工作區,之後再按照工作區的操作撤回就好了。

9.3 撤回本地commit。

git reset --soft head^,這個命令的意思是回退到當前版本的上乙個版本,如果想多回退乙個版本,可以使用git reset --soft head^^,就是乙個^代表乙個版本,兩個^就代表兩個版本。其中--soft的引數是代表本地修改不會撤銷,如果使用--hard就會將本地修改一併撤銷,慎用hard。

9.4 撤回已經push到遠端倉庫的commit。

這個操作其實是靠強制推送本地版本來實現的,所有強制操作都是有風險的,所以一般情況下不建議使用,但是如果你能確保安全的話,還是可以用一用的。

首先回退本地版本,使用9.3的命令,比如需要撤回最新的乙個commit,那麼就先回退本地上乙個版本git reset --soft head^,然後強制將當前版本推送到遠端倉庫git push --force。這樣遠端倉庫就也回退到上乙個版本了。

這個操作危險在**呢?在乙個多人協作的專案裡,如果在你強制推送上乙個版本到遠端的時候,恰好有另乙個人向遠端倉庫提交了乙個commit,你的版本就會覆蓋他的commit,就相當於別人的commit沒有提交上去,但是不仔細檢查的話,這個錯誤就可能沒有人發現,說不定一直隱藏到版本發布。。。不過呢,如果你確定要強推的分支只有你乙個人使用,這個操作就應該沒有什麼問題。

20190813更新

11、如何更新遠端分支**到本地:實際開發中可能會遇到很多這樣的情況,遠端倉庫分支**更新到了乙個新的版本,本地還停留在之前。這時候需要將遠端的拉取到本地,又不影響本地的修改。許多人可能會想到用git merge,其實有乙個更好用的命令可以代替git merge,它就是git rebase。

首先,將本地分支的所有修改暫存起來:git stash;然後拉取遠端倉庫最新**,git fetch origin,其中origin應該是你想要拉取更新的倉庫的名字;然後使用git rebase origin/master來將遠端倉庫更新到本地,其中master應該是你想要更新的分支名字。

建立你的第乙個 Git 倉庫

雖然 git 確實是被許多重要軟體選作版本控制工具,但是並不是僅能用於這些重要軟體 它也能管理你購物清單 如果它們對你來說很重要的話,當然可以了 你的配置檔案 週報或日記 專案進展日誌 甚至源 使用 git 是很有必要的,畢竟,你肯定有過因為乙個備份檔案不能夠辨認出版本資訊而抓狂的時候。git 無法...

建立你的第乙個 Git 倉庫

雖然 git 確實是被許多重要軟體選作版本控制工具,但是並不是僅能用於這些重要軟體 它也能管理你購物清單 如果它們對你來說很重要的話,當然可以了 你的配置檔案 週報或日記 專案進展日誌 甚至源 使用 git 是很有必要的,畢竟,你肯定有過因為乙個備份檔案不能夠辨認出版本資訊而抓狂的時候。git 無法...

第乙個提出「雲計算」概念的人

一般而言,提到一家公司,往往第一印象會是它的創始人,就像賈伯斯之於蘋果,馬雲之於阿里巴巴 但是提起號稱本世界最偉大的網際網路公司 谷歌,卻是埃里克 施密特這個名字進入腦海。傳奇經歷 出生於1955年的施密特,其生平經歷堪稱傳奇,擁有普林斯頓大學電子工程師學士 加州伯克利分校電腦科學博士學位,在進入谷...