linux下git的使用
文章目錄
- git的使用
- 1、初始化一個Git倉庫,使用git init命令。
- 2、暫存區stage是Git非常重要的概念,Git跟蹤并管理的是修改,而非文件。
- 3、要關聯一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git;
- 4、要克隆一個倉庫,首先必須知道倉庫的地址,然后使用git clone命令克隆。
- 5、git 的版本切換
- 6、fork別人的代碼后如何保持和原作者同步的更新
- 7、.gitignore規則不生效的解決辦法
- 8、GIT 查看/修改用戶名和郵箱地址
- 9、git 對比兩個分支差異
- 10、git 中 submodule 子模塊的使用
- 子模塊的添加
- 子模塊的使用
- 子模塊的更新
- 刪除子模塊
- 11、參見其他更加完整的 git 使用命令文檔說明,如下:
- 12、關于GitHub 的多人協同項目的創建及其介紹參見如下的文章
- 13、搭建離線的 GitLab 網址
git的使用
1、初始化一個Git倉庫,使用git init命令。
添加文件到Git倉庫,分兩步:
-
第一步,使用命令git add ,注意,可反復多次使用,添加多個文件;
-
第二步,使用命令git commit,完成。
-
要隨時掌握工作區的狀態,使用git status命令。
-
如果git status告訴你有文件被修改過,用git diff可以查看修改內容。
-
HEAD指向的版本就是當前版本,因此,Git允許我們在版本的歷史之間穿梭,使用命令git reset --hard commit_id。
-
穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。
-
要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。
2、暫存區stage是Git非常重要的概念,Git跟蹤并管理的是修改,而非文件。
- Git是如何跟蹤修改的,每次修改,如果不add到暫存區,那就不會加入到commit中。
- 場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時,用命令git checkout – file。
- 場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改,分兩步,第一步用命令git reset HEAD file,就回到了場景1,第二步按場景1操作。
- 命令git rm用于刪除一個文件。如果一個文件已經被提交到版本庫,那么你永遠不用擔心誤刪,但是要小心,你只能恢復文件到最新版本,你會丟失最近一次提交后你修改的內容
3、要關聯一個遠程庫,使用命令git remote add origin git@server-name:path/repo-name.git;
關聯后,使用命令git push -u origin master第一次推送master分支的所有 內容;
此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;
如果想要提交某一次指定的 commit 而不是本地最新的 commit, 可以使用如下命令:
4、要克隆一個倉庫,首先必須知道倉庫的地址,然后使用git clone命令克隆。
Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快
- 查看某個文件的歷史提交的版本代碼
5、git 的版本切換
- 一般會,先使用 git log或者 git log --pretty=oneline 找出 commit_id 。之后,便可以使用命令git reset --hard commit_id 切換版本了
- 或者使用簽出一個新的分支的方法,用git checkout -b commit_id的方法,創建一個新的分支,并切換到新的分支
- 使用git branch 可以查看有哪些分支,注意看 master 分支前的 * 字符:它表示當前所在的分支。也就是說,如果現在提交更新,master 分支將隨著開發進度前移。若要查看各個分支最后一個提交對象的信息,運行 git branch -v,然后可以用 git checkout 切換到對應的分支
- 要從該清單中篩選出你已經(或尚未)與當前分支合并的分支,可以用 --merged 和 --no-merged 選項。比如用 git branch --merged 查看哪些分支已被并入當前分支(譯注:也就是說哪些分支是當前分支的直接上游。)
- 一般來說,列表中沒有 * 的分支通常都可以用 git branch -d 來刪掉。原因很簡單,既然已經把它們所包含的工作整合到了其他分支,刪掉也不會損失什么。
- 另外可以用 git branch --no-merged 查看尚未合并的工作:它會顯示還未合并進來的分支。由于這些分支中還包含著尚未合并進來的工作成果,所以簡單地用 git branch -d 刪除該分支會提示錯誤,因為那樣做會丟失數據。
- 打標簽 git tag -a <版本號> -m "<備注信息>"
- 將本地標簽提交到遠程倉庫
前面所提到的創建標簽,只是將標簽添加到了本地的版本管理,我們需要在創建之后將本地標簽同步到遠程倉庫,如Github。
推送所有標簽
git push origin --tags推送指定版本的標簽
git push origin <版本號>刪除遠程倉庫的標簽
同創建本地標簽一樣,刪除了本地標簽之后也要同時刪除遠程倉庫的標簽。
新版本Git (> v1.7.0)
git push origin --delete <版本號>
6、fork別人的代碼后如何保持和原作者同步的更新
在GitHub上我們會去fork別人的一個項目,這就在自己的Github上生成了一個與原作者項目互不影響的副本,自己可以將自己Github上的這個項目再clone到本地進行修改,修改后再push,只有自己Github上的項目會發生改變,而原作者項目并不會受影響,避免了原作者項目被污染。但經過一段時間, 有可能作者原來的代碼變化很大, 你想接著在他最新的代碼上修改, 這時你需要合并原作者的最新代碼過來, 讓你的項目變成最新的。
1、先克隆項目到本地:
Git clone https://github.com/iakuf/mojo
cd mojo
2、添加原作者項目的 remote 地址, 然后將代碼 fetch 過來
git remote add sri https://github.com/kraih/mojo
git fetch sri
‘sri’相當于一個別名
查看本地項目目錄: git remote -v
3、合并
git checkout master
git merge sri/master
如果有沖突的話,需要丟掉本地分支:
git reset –hard sri/master
4、這時你的當前本地的項目變成和原作者的主項目一樣了,可以把它提交到你的GitHub庫
git commit -am ‘更新到原作者的主分支’
git push origin
git push -u origin master -f –強制提交
7、.gitignore規則不生效的解決辦法
把某些目錄或文件加入忽略規則,按照上述方法定義后發現并未生效,原因是.gitignore只能忽略那些原來沒有被追蹤的文件,如果某些文件已經被納入了版本管理中,則修改.gitignore是無效的。那么解決方法就是先把本地緩存刪除(改變成未被追蹤狀態),然后再提交:
git rm -r --cached . git add . git commit -m 'update .gitignore'8、GIT 查看/修改用戶名和郵箱地址
用戶名和郵箱地址的作用
查看用戶名和郵箱地址:
$ git config user.name$ git config user.email修改用戶名和郵箱地址:
$ git config --global user.name "username"$ git config --global user.email "email"其中,加上 --global 是全局設置的意思,不加是局部設置的意思。
- git push 報錯 403:
可以清楚緩存后,在嘗試。命令如下:
git config --local --unset credential.helper git config --global --unset credential.helper git config --system --unset credential.helper關于 credential 可以參見:
https://blog.csdn.net/u012163684/article/details/52433645
9、git 對比兩個分支差異
比如我們有 2 個分支:master, dev,現在想查看這兩個 branch 的區別,有以下幾種方式:
1.查看 dev 有,而 master 中沒有的:
git log dev ^master同理查看 master 中有,而 dev 中沒有的內容:
git log master ^dev這里寫圖片描述
2 查看 dev 中比 master 中多提交了哪些內容:
git log master..dev注意,列出來的是兩個點后邊(此處即dev)多提交的內容。同理,想知道 master 比 dev 多提交了什么:
git log dev..master3 不知道誰提交的多誰提交的少,單純想知道有什么不一樣:
git log dev…master
4.在上述情況下,再顯示出每個提交是在哪個分支上:
git log --left-right dev…master
10、git 中 submodule 子模塊的使用
背景:我們經常會遇到:某個工作中的項目需要包含并使用另一個項目。 也許是第三方庫,或者你獨立開發的,用于多個父項目的庫。 現在問題來了:你想要把它們當做兩個獨立的項目,同時又想在一個項目中使用另一個。
如果將這個庫包含進來,那么無論用何種方式都很難定制它,部署則更加困難,因為你必須確保每一個客戶端都包含該庫。 如果將代碼復制到自己的項目中,那么你做的任何自定義修改都會使合并上游的改動變得困難。
Git 通過子模塊來解決這個問題。 子模塊允許你將一個 Git 倉庫作為另一個 Git 倉庫的子目錄。 它能讓你將另一個倉庫克隆到自己的項目中,同時還保持提交的獨立。git 提交日志的獨立,代碼管理的獨立性。從而避免將主項目和子項目混成一談,從而避免 git 代碼管理的混亂。
下面我們介紹子模塊相關的基礎命令,詳細使用請參考 man page。
子模塊的添加
添加子模塊非常簡單,命令如下:
git submodule add <url> <path>其中,url為子模塊的路徑,path為該子模塊存儲的目錄路徑。執行成功后,git status會看到項目中修改了.gitmodules,并增加了一個新文件(為剛剛添加的路徑)
git diff --cached 查看修改內容可以看到增加了子模塊,并且新文件下為子模塊的提交hash摘要
git commit提交即完成子模塊的添加
子模塊的使用
克隆項目后,默認子模塊目錄下無任何內容。需要在項目根目錄執行如下命令完成子模塊的下載:
git submodule init git submodule update或:
git submodule update --init --recursive執行后,子模塊目錄下就有了源碼,再執行相應的makefile即可。
子模塊的更新
子模塊的維護者提交了更新后,使用子模塊的項目必須手動更新才能包含最新的提交。
在項目中,進入到子模塊目錄下,執行 git pull更新,查看git log查看相應提交。
完成后返回到項目目錄,可以看到子模塊有待提交的更新,使用git add,提交即可。
刪除子模塊
有時子模塊的項目維護地址發生了變化,或者需要替換子模塊,就需要刪除原有的子模塊。
刪除子模塊較復雜,步驟如下:
rm -rf 子模塊目錄 刪除子模塊目錄及源碼 vi .gitmodules 刪除項目目錄下.gitmodules文件中子模塊相關條目 vi .git/config 刪除配置項中子模塊相關條目 rm .git/module/* 刪除模塊下的子模塊目錄,每個子模塊對應一個目錄,注意只刪除對應的子模塊目錄即可 執行完成后,再執行添加子模塊命令即可,如果仍然報錯,執行如下:git rm --cached 子模塊名稱完成刪除后,提交到倉庫即可。
11、參見其他更加完整的 git 使用命令文檔說明,如下:
https://www.cnblogs.com/wupeiqi/p/7295372.html
12、關于GitHub 的多人協同項目的創建及其介紹參見如下的文章
http://www.cnblogs.com/zhaoyanjun/p/5882784.html
13、搭建離線的 GitLab 網址
https://blog.csdn.net/b644rofp20z37485o35m/article/details/80851382
總結
以上是生活随笔為你收集整理的linux下git的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 需求分析——识别系统需求中的三类事件
- 下一篇: Python3错误和异常