Git與碼雲(Git@OSC)入門-如何在實驗室和宿舍同步你的代碼(2)

4. 處理衝突

4.1 向遠程倉庫push時沒法提交成功,提示在push前應該先pull

如圖所示:

有多是由於遠程倉庫的版本與本地倉庫的版本不一致,因此應先git pull將遠程倉庫的內容合併到本地,
而後再git push origin master將本地的更新推到遠程倉庫中。html

4.2 如何處理衝突:

有的時候在pull時會產生衝突,如圖所示,裏面提示在合併HelloWorld.java的時候,產生衝突
java

這時候打開你的HelloWorld.java時,會發現以下內容:git

public class HelloWorld{
    public static void main(String[] args){
<<<<<<< HEAD
        x
=======
        System.out.
>>>>>>> c22d2987adc785ea55fc4fc39709765c6baeb037
    }
}

<<<<<<< HEAD=======之間的內容,表明你本地倉庫中文件的內容。
=======>>>>>>> c22d2987adc785ea55fc4fc39709765c6baeb037之間的內容表明遠程倉庫中的內容
咱們根據須要進行保留,如刪掉x及表示衝突的那些註釋。而後從新add, commit,最後再push就能夠成功。github

5.撤銷修改

5.1 撤銷已經add但未commit(提交)的修改(git checkout --):

git reset HEAD *,將全部在暫存區的中的修改放回工做區(即把add過但還未commit的改動放回工做區)eclipse

5.2 某個文件已經修改或者被刪除,但還未add。如何撤銷?

好比你不當心刪除了某個文件(如刪除了Test.java)、修改了某些文件,可是還未add。
使用git checkout -- .,可將你所作的全部工做都被撤銷(更改工做區中的文件)。這條操做有點危險,慎用。
若是隻想恢復某個文件,如Test.java,可使用git checkout -- Test.java,推薦使用這個操做指定文件恢復。
若是想恢復全部對java文件的操做,可使用git checkout -- *.java
注意:在Eclipse中若是刪除某文件,未add,而後使用git checkout,這時候在Eclipse中須要F5刷新才能看到
恢復的文件。學習

5.3 撤銷已經提交到倉庫裏的修改(git reset):

若是所作的改動已經提交到庫裏,這時候使用git checkout就無能爲力。
使用git reset --hard "HEAD^",注意:這條命令會把全部的上次提交前的修改重置,比較危險。ui

撤銷概念的理解詳見.net

6.Git基本概念插件

中的示意圖命令行

6.Git基本概念

從上面咱們能夠看到,爲了讓倉庫能夠管理咱們的代碼,咱們首先須要讓git跟蹤(track)咱們的代碼。
當咱們新建一個文件的時候,該文件在工做區,處於untracked狀態,咱們須要經過git add將其放入
暫存區,這時候git就能夠跟蹤該文件。進一步使用git commit,就可將該文件放入倉庫。放入倉庫
其實是對你暫存區中的文件等進行一個快照。一旦文件放入倉庫,就可對其進行版本管理。換句話說
這時候你的放入倉庫的相關文件不再會丟失啦。
簡單的示意圖以下。

該圖不徹底正確。好比,git reset --hard "HEAD^"會讓工做區、暫存區的任何改變都丟失。
而若是使用--soft參數,暫存區、工做區的內容不會變化,只是返回上一個commit,相似圖中的由本地
倉庫回到暫存區。而使用--mix參數,工做區內容不會變化,但不會放入暫存區,相似圖中由本地倉庫
回到工做區。

7. 使用Git管理你的Eclipse項目(命令行下)

在Eclipse下還可使用圖形界面的EGit插件(見,使用Eclipse Egit與碼雲管理你的代碼)。
雖然圖形界面上手更簡單,但仍是建議在命令行下進行操做。

7.1 在碼雲上建立項目

注意:不要勾選使用Readme文件初始化這個項目

7.2 Git全局配置:

git config --global user.name "YourName"
git config --global user.email "YourEmailAtOSC"

7.3 在Eclipse中建立項目,並使用Git管理

好比建立了GitLearn項目, 在GitLearn項目下建立README.md

cd GitLearn
git init
git add -A
git commit -m "first commit"
git remote add origin https://git.oschina.net/zhrb/GitLearn.git
git push -u origin master

注意:有的時候執行git push或者git pull的時候會顯示fatal: refusing to merge unrelated histories
緣由是想要合併兩個不一樣的項目(遠程初始化創建倉庫和本機另外創建的倉庫)。
這時候執行git pull origin master --allow-unrelated-histories強制合併,而後再執行git push origin master
具體參考資料git沒法pull倉庫refusing to merge unrelated histories

7.4 添加.gitignore文件

在項目目錄下,新建.gitignore文件,對於Eclipse項目,參見範例
內容以下:

*.class
# BlueJ files
*.ctxt
# Mobile Tools for Java (J2ME)
.mtj.tmp/
# Package Files #
*.jar
*.war
*.ear
# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
hs_err_pid*

而後git add .gitignore,git commit -am "add gitignore",git push
之後git就會忽略上述文件和目錄,具體資料詳見

Eclipse 添加.gitignore

其餘資料:

如不用命令行也可直接使用Eclipse上的Git插件EGIT,見下面參考資料:

使用Eclipse Egit與碼雲管理你的代碼
Eclipse中egit插件使用--升級版
利用eclipse的git插件EGit與git@osc交互

8.更多參考資料

對命令行不熟悉可使用Git GUI,Git可視化極簡易教程 — Git GUI使用方法
廖雪峯GIT教程-一步一步使用命令行學習Git
Git使用全面教程-成體系,講的很是清楚
Eclipse上GIT插件EGIT使用

9. 使用的Git的一些坑

  1. GitHub 第一坑:換行符自動轉換,CRLF、LF
  2. fatal: could not read Username for 'https://git.oschina.net': Invalid argument,建議使用文章裏面介紹的修改.git/config文件的方法。
  3. Git for Windows亂碼問題:到官網下載最新版本。或者建議所有使用英文,完全杜絕亂碼煩惱。
相關文章
相關標籤/搜索