日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Tools】git操作总结

發布時間:2025/3/21 编程问答 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Tools】git操作总结 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

git操作總結

下載的工程帶有子工程submodule:

當使用git clone下來的工程中帶有submodule時,初始的時候,submodule的內容并不會自動下載下來的,此時,只需執行如下命令:

git submodule update --init --recursive

即可將子模塊內容下載下來。


常用的撤銷操作

(1)撤銷本地工作區修改:

git checkout -- <file> 撤銷某個file文件修改 或 git checkout . 撤銷全部文件的修改,但是不能把新增的文件刪除。該命令是用版本庫里的版本替換 工作區的版本,替換為上一次add的版本,就相當于撤銷,無論工作區是修改還是刪除,都可以“一鍵還原”。

(2)撤銷已經add到暫存區的修改

git reset HEAD <file> 或 git reset HEAD .

(3)撤銷已經commit到版本庫中的修改

可參考 https://www.jianshu.com/p/c2ec5f06cf1a

git reset --soft HEAD^ # 把當前版本回退到上一個版本,會保留工作區修改,和暫存區修改,即只撤銷commit操作,add后的內容和工作區的內容都不會撤銷。 或 git reset (--mixed,該參數可省略) HEAD^ # 把當前版本回退到上一個版本,會保留工作區修改,即變為了add之前的狀態。 或 git reset commit_id # 把當前版本回退到commit_id版本號,會保留工作區修改,變為了add之前的狀態 或 git reset --hard commit_id # 把當前版本回退到某個版本號,會把工作區的所有文件都變回為 commit_id 版本,不會保留工作區修改 或 git reset --hard HEAD^ # 把當前版本回退到上一個版本,不會保留工作區修改。

解決沖突的操作步驟

解決沖突之后需要add和commit一遍,還是只需要commit一遍?應該是add+commit吧
先add,再commit,然后才能 git pull --rebase origin 遠程分支名,不add,或者不commit,就不可能pull成功。
git pull --rebase origin 遠程分支名后會有沖突,解決沖突之后使用 git rebase --continue
然后再 git commit --amend --no-edit這樣就不用重新編輯commit信息,(此時不需要再執行git pull --rebase origin 遠程分支名了),然后再 git push origin 本地分支:遠程分支

git diff

git diff commit_id file_name 查看file_name文件和commit_id提交的不同 git diff branch_name file_name 查看file_name文件在本分支和branch_name分支的不同

覆蓋已經push到遠程倉庫分支的提交內容 --force-with-lease

當我們push到遠程分支后,發現有問題想修改卻又想去掉遠程倉庫的本次提交,并且此時沒有別人向遠程分支push過內容,就可以使用下面的命令

git reset commit_id # 這個id是上一次的(別人)提交的id,撤銷已commit的修改 git add file # 把修改的文件再重新add一遍 git commit -m "mesage" # 這里的commit消息可以與我們想要覆蓋的消息不一樣,執行下面的最后一步后覆蓋掉之前的提交的的 git push origin branch_name --force-with-lease # 直接git push origin branch_name會被rejected,加上--force-with-lease就可以成功推送然后覆蓋遠程的提交而不產生一個新提交。

禁止使用git push --force來推送,因為這樣強制推送會覆蓋掉別人遠程的提交,造成

只提交一部分修改文件,另一部分修改文件不提交

將需要提交的修改文件 git add file_1 file_2,然后git commit -m "message",剩下的不想提交的都git stash``,然后git pull --rebase,然后git push,最后再git stash pop```就可以彈出之前沒有提交的文件,并且這些文件中我們修改過的部分還在。

配置

git config --global user.name "Your Name" git config --global user.email "email@example.com"

注意git config命令的--global參數,用了這個參數,表示你這臺機器上所有的Git倉庫都會使用這個配置,當然也可以對某個倉庫指定不同的用戶名和Email地址。

git diff可以查看修改內容
git diff readme.txt

版本回退

版本回退主要兩個命令:

git reset --hard HEAD^ # 把當前版本回退到上一個版本

git reset --hard commit_id # 把當前版本回退到某個版本號

詳細解釋如下:
在Git中,用HEAD表示當前版本,也就是最新的提交1094adb...,上一個版本就是HEAD^,上上一個版本就是HEAD^^,當然往上100個版本寫100個^比較容易數不過來,所以寫成HEAD~100。

現在,我們要把當前版本回退到上一個版本,就可以使用git reset命令:

git reset --hard HEAD^

HEAD指向的版本就是當前版本,HEAD^指向的版本就是上一個版本.

Git允許我們在版本的歷史之間穿梭,使用命令:

git reset --hard commit_id

commit id(版本號)是一大串類似1094adb…

穿梭前,用git log可以查看提交歷史,以便確定要回退到哪個版本。

要重返未來,用git reflog查看命令歷史,以便確定要回到未來的哪個版本。

工作區、暫存區、版本庫

工作區就是本地修改的文件,在電腦里能看到的目錄,比如我的study-cidi文件夾就是一個工作區;

第一步是用git add把文件添加進去,實際上就是把文件修改添加到暫存區;

第二步是用git commit提交更改,實際上就是把暫存區的所有內容提交到當前分支;

版本庫包含暫存區stage和master分支和Head指針,Git的版本庫里存了很多東西,其中最重要的就是稱為stage(或者叫index)的暫存區,還有Git為我們自動創建的第一個分支master,以及指向master的一個指針叫HEAD。

撤銷修改

(1)命令git checkout -- readme.txt意思就是,把readme.txt文件在工作區的修改全部撤銷。命令中的兩個橫杠--很重要,沒有--,就變成了“切換到另一個分支”的命令。git checkout -- readme.txt其實是用版本庫里的版本替換工作區的版本,替換為上一次add的版本,就相當于撤銷,無論工作區是修改還是刪除,都可以“一鍵還原”。

(2)命令git reset HEAD <file>可以把暫存區的修改撤銷掉(unstage),重新放回工作區,如:
git reset HEAD readme.txt可把已經add到暫存區的文件修改撤銷掉。

場景1:當你改亂了工作區某個文件的內容,想直接丟棄工作區的修改時:

用命令git checkout -- file

場景2:當你不但改亂了工作區某個文件的內容,還添加到了暫存區時,想丟棄修改:

分兩步,第一步用命令git reset HEAD <file>,就回到了場景1,第二步按場景1操作:

git reset HEAD <file> # 把已經```add```到暫存區的文件修改撤銷掉,這一步后只剩下工作區的修改了 git checkout -- file # 把file文件在工作區的修改全部撤銷。

場景3:已經提交了不合適的修改到版本庫時,想要撤銷本次提交,參考版本回退一節,不過前提是沒有推送到遠程庫:

版本回退主要兩個命令:

git reset --hard HEAD^ # 把當前版本回退到上一個版本

git reset --hard commit_id # 把當前版本回退到某個版本號
(1)撤銷本地工作區修改:
git checkout -- <file> 撤銷某個file文件 或 git checkout . 撤銷全部文件的修改,但是不能把新增的文件刪除。該命令是用版本庫里的版本替換工作區的版本,替換為上一次add的版本,就相當于撤銷,無論工作區是修改還是刪除,都可以“一鍵還原”。
(2)撤銷已經add到暫存區的修改
git reset HEAD <file> 或 git reset HEAD .
(3)撤銷已經commit到版本庫中的修改
git reset --hard HEAD^ # 把當前版本回退到上一個版本 或 git reset --hard commit_id # 把當前版本回退到某個版本號

刪除文件

??當你把文件git add test.txt添加到版本庫后,想要刪除該文件,可以 rm test.txt,也可以手動刪除,然后Git知道你刪除了文件,因此,工作區和版本庫就不一致了,接下來就需要在版本庫中刪除test.txt,使用git rm test.txt,注意這兩個命令加不加git是有差別的。要從版本庫中刪除該文件,那就用命令git rm test.txt刪掉,并且git commit -m 'msg'.

當你rm刪錯某個文件了(不是git rm),因為版本庫里還有呢,所以可以很輕松地把誤刪的文件恢復到最新版本:

git checkout -- test.txt

git checkout -- test.txt其實是用版本庫里的版本替換工作區的版本,無論工作區是修改還是刪除,都可以“一鍵還原”。

注意:從來沒有被添加到版本庫就被刪除的文件,是無法恢復的!

SSH

????為什么GitHub需要SSH Key呢?因為GitHub需要識別出你推送的提交確實是你推送的,而不是別人冒充的,而Git支持SSH協議,所以,GitHub只要知道了你的公鑰,就可以確認只有你自己才能推送。
??Git支持多種協議,包括https,但通過ssh支持的原生git協議速度最快。使用https除了速度慢以外,還有個最大的麻煩是每次推送都必須輸入口令,但是在某些只開放http端口的公司內部就無法使用ssh協議而只能用https。

????第1步:創建SSH Key。在用戶主目錄下,看看有沒有.ssh目錄,如果有,再看看這個目錄下有沒有id_rsa和id_rsa.pub這兩個文件,如果已經有了,可直接跳到下一步。如果沒有,打開Shell(Windows下打開Git Bash),創建SSH Key:

ssh-keygen -t rsa -C "youremail@example.com"

你需要把郵件地址換成你自己的郵件地址,然后一路回車,使用默認值即可,由于這個Key也不是用于軍事目的,所以也無需設置密碼。

如果一切順利的話,可以在用戶主目錄里找到.ssh目錄,里面有id_rsa和id_rsa.pub兩個文件,這兩個就是SSH Key的秘鑰對,id_rsa是私鑰,不能泄露出去,id_rsa.pub是公鑰,可以放心地告訴任何人。

??第2步:登陸GitHub,打開“Account settings”,“SSH Keys”頁面,然后,點“Add SSH Key”,填上任意Title,在Key文本框里粘貼id_rsa.pub文件的內容.點“Add Key”,你就應該看到已經添加的Key.

關聯遠程庫

要關聯一個遠程庫,使用命令

git remote add origin git@server-name:path/repo-name.git

關聯后,使用命令git push -u origin master第一次推送master分支的所有內容;

此后,每次本地提交后,只要有必要,就可以使用命令git push origin master推送最新修改;

分支

Git鼓勵大量使用分支:

1.查看分支:git branch

2.創建分支:git branch <name>

3.切換分支:git checkout <name>
注意區分git checkout -- readme.txt是撤銷工作區修改的指令,不要混淆了

4.創建+切換分支:git checkout -b <name>

相當于執行下面這兩條命令:

git branch <name> git checkout <name>

5.合并某分支到當前分支:git merge <name>

6.刪除分支:git branch -d <name>

7.查看分支合并圖:git log --graph
每個歷史一行:git log --graph --pretty=oneline
每個歷史一行,并且commit_id使用縮略:git log --graph --pretty=oneline --abbrev-commit

8.查看命令歷史:git reflog

合并分支 和 Fast forward

需要把某個分支branch-1合并到另一個分支branch-2,需要先切換到branch-2:git checkout branch-2,然后再合并git merge branch-1即可。

git checkout master git merge dev

上面這種合并分支時,由于當前 master 分支所在的提交對象是要并入的 dev 分支的直接上游,Git 只需把 master 分支指針直接右移。換句話說,如果順著一個分支走下去可以到達另一個分支的話,那么 Git 在合并兩者時,只會簡單地把指針右移,因為這種單線的歷史分支不存在任何需要解決的分歧,所以這種合并過程可以稱為快進(Fast forward)。

??合并分支時,加上--no-ff參數就可以用普通模式合并,合并后的歷史有分支,能看出來曾經做過合并,而fast forward合并就看不出來曾經做過合并。

準備合并dev分支,請注意–no-ff參數,表示禁用Fast forward:

git merge --no-ff -m "merge with no-ff" dev

因為本次合并要創建一個新的commit,所以加上-m參數,把commit描述寫進去。

master分支應該是非常穩定的,也就是僅用來發布新版本,平時不能在上面干活;
干活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,比如1.0版本發布時,再把dev分支合并到master上,在master分支發布1.0版本;

你和你的小伙伴們每個人都在dev分支上干活,每個人都有自己的分支(例如:我的是zhuhz分支),時不時地把(zhz分支)往dev分支上合并即可,不要合并到master。

bug分支

之所以用到git stash暫存工作現場,而不提交,并不是你不想提交,而是工作只進行到一半,還沒法提交,預計完成還需1天時間。但是,必須在兩個小時內修復該bug,怎么辦?
幸好,Git還提供了一個stash功能,可以把當前工作現場“儲藏”起來,等以后恢復現場后繼續工作.

疑問:為什么不add一下,并不commit,這樣不行嗎?還是說add之后就會把所有的各個分支上add的東西都放在了一起,你下次在add別的分支上的修改之后add了commit,也會把我現在這個分支上的修改給一起commit?記得試驗一下。弄懂原因。

git stash git stash list

Git把stash內容存在某個地方了,但是需要恢復一下,有兩個辦法:

一是用git stash apply恢復,但是恢復后,stash內容并不刪除,你需要用git stash drop來刪除;

另一種方式是用git stash pop,恢復的同時把stash內容也刪了.

在master分支上修復的bug,想要合并到當前dev分支,可以用git cherry-pick <commit_id>命令,把bug提交的修改“復制”到當前分支,避免重復勞動。

修改最近一次的commit內容

git commit --amend

然后會自動在用默認編輯器vim中打開一個文件COMMIT_EDITMSG,修改第一行信息即可。如果是默認vim,那不會有問題,如果是默認是gedit,這種方法沒用,只能改為默認用vim編輯,方法是git config --global core.editor vim。

git commit -am "haha"

等價于下面兩條命令:

git add . git commit -m "haha"

總結

以上是生活随笔為你收集整理的【Tools】git操作总结的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。