Git(7)-Git commit

Git提交

  • 1.識別不同的提交
    • 1.1絕對提交名-ID
    • 1.2 引用和符號引用--HEAD
  • 2.查看提交的歷史記錄-git log
  • 3.提交圖-gitk
  • 4.提交的范圍
    • 4.1 X..Y
    • 4.1 X...Y
  • 5.查找bad 提交--git bisect
  • 6.查看代碼修改者-git blame

命令概覽

git commit -a # 直接提交修改和刪除文件有效

加了-a,在 commit 的時候,能幫你省一步 git add ,但也只是對修改和刪除文件有效, 新文件還是要 git add,不然就是 untracked 狀態。

1.識別不同的提交

在開發的過程中,能正確的區分不同的提交是十分必要的。例如,在新建分支時,必須要選擇某個提交來作為分支點;當比較代碼差異時,必須指明兩個提交。在git中可以通過顯示引用或者隱式引用來指代每一個提交。

當你要與同事討論相同數據的提交時,最好使用兩個版本中的相同提交名。

1.1絕對提交名-ID

40位的十六進制數字

git log -l --pretty=oneline 1fbb58

1.2 引用和符號引用–HEAD

引用(ref)指向Git對象庫中的對象。一般用引用指向提交對象。分支名稱,標簽名都是引用。

.git 目錄中有三種的命名空間表示不同的引用

chenyingying01@cyy hello % ls -hl .git/refs
total 0
drwxr-xr-x  2 chenyingying01  staff    64B  8 28 11:28 heads     # 本地分支
drwxr-xr-x  3 chenyingying01  staff    96B  8 29 12:48 tags      # 標簽
drwxr-xr-x  3 chenyingying01  staff    96B  8 29 12:48 remotes   # 遠程跟蹤分支

例如本地一個叫dev的分支是ref/heads/dev的縮寫。

Git 自動維護幾個用于特定目的的特殊符號引用:

  1. HEAD–始終指向當前分支的最近提交
  2. ORIG_HEAD–合并,復位操作會記錄一下原來的HEAD,用于恢復或者回滾到之前的狀態
  3. FETCH_HEAD–git fetch 命令將所有抓取分支的頭記錄到.git/FETCH_HEAD中,僅在剛剛抓去操作之后才有效。
  4. MERGE_HEAD–當一個合并操作正在進行時,其他分支的頭暫時記錄在MERGE_HEAD中。

符號引用–用一些特殊的符號集合來指代引用
^ 某一提交的上一個提交
~2 某提交的上兩個提交

當一個提交具有多個父提交時,^表示不同的父提交

2.查看提交的歷史記錄-git log

git log HEAD # 輸出每個可從HEAD找到歷史提交日志消息
git log commit # 輸出從該提交開始回溯的歷史提交日志消息
git log commit1 commmit2 # 顯示commmit1-commit2之間提交 
git log -n -p commitID   # -n限制回溯的條數,-p顯示該文件修改的地方(打的布丁或者變更)

git log 提供的的可選擇參數

git log --pretty=short   # 限制顯示信息的數量, oneline, short, full
git log --abbrev-commit  # 顯示散列值的縮寫
git log -Sstring         # 根據給定的string,沿著文件的差異歷史搜索。(找出與string相關的歷史變化?太強大了。)

3.提交圖-gitk

提交的時間戳是不可信的。
使用gitk 來查看提交圖–需要配置一下gitk工具

4.提交的范圍

4.1 X…Y

許多git命令 都允許 指定提交范圍,例如 git log

git log X..Y   # 列出Y提交所有可達的提交,排除掉其中可達X的提交。
git log ^X Y   # 等價命令 

難點:辨別X和Y的可達提交,或者從顯示結果中推出提交之間的邏輯關系

用處:如果你某個分支來自另一個版本庫,那么^可以用來定位那些在你版本庫而不在別人版庫里的提交。

4.1 X…Y

對稱差-求 XY各自擁有的提交的并集。

5.查找bad 提交–git bisect

有一天早上,你突然發現版本庫出問題了,但是前天明明還是好的。這就需要定位到那個罪魁禍首(bad)提交。

git bisect : 指定提交范圍,在該范圍內進行二分查找,直至你定位到導致版本庫出問題的提交。

啟動二分搜索后,Git使用一個分離(detached) HEAD 來管理版本庫的當前檢出版本,支持定位操作。定位完成后需要將分支切換為原來的分支。

**關鍵點:**每次以reset工作區為搜索范圍的中點提交,確定該提交是的好壞屬性(在另一個終端中確定提交的好壞

在二分搜索的過程中,Git維護一個日志,來記錄搜索的過程。(如果找不到自己的方向了)可以使用git bisect replay 命令使用日志文件作為輸入。

git bisect strat    					# 啟動二分搜索
git bisect bad    						# 指定壞提交,省略就是HEAD
git bisect good commitID/v2.6.27        # 指定好提交
# 輸出中點版本,你確定改版本是好壞
git bisect good     # HEAD應該是移動到了中點提交,省略了HEAD(個人猜想)假定這個中點是好的
git bisect bad	    # 假定這個中點是壞的的
....
git bisect reset                        # 完成搜索后,換回原來的分支

6.查看代碼修改者-git blame

查看文件的每一行 最后是xxx(誰) 在哪次提交中 修改的。

git blame -L 35, init/xxx.c # -L 是個什么作用。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444671.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444671.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444671.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode111. 二叉樹的最小深度

給定一個二叉樹,找出其最小深度。 最小深度是從根節點到最近葉子節點的最短路徑上的節點數量。 說明: 葉子節點是指沒有子節點的節點。 示例: 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最小深度 2. 思路&#xff1a…

Caffe將圖像數據轉換成leveldb/lmdb

Caffe中convert_imageset projrct將圖像數據轉換成Caffe能讀取的數據格式leveldb/lmdb -gray=true //whether read gray image -shuffle=true //whether mix order -resize_height=28 -resize_width=28 -backend=lmdb …

leetcode155. 最小棧

設計一個支持 push,pop,top 操作,并能在常數時間內檢索到最小元素的棧。 push(x) -- 將元素 x 推入棧中。 pop() -- 刪除棧頂的元素。 top() -- 獲取棧頂元素。 getMin() -- 檢索棧中的最小元素。 示例: MinStack minStack new MinStack()…

理解Caffe的網絡模型

目錄 1. 初見LeNet原始模型2. Caffe LeNet的網絡結構3. 逐層理解Caffe LeNet 3.1 Data Layer3.2 Conv1 Layer3.3 Pool1 Layer3.4 Conv2 Layer3.5 Pool2 Layer3.6 Ip1 Layer3.7 Relu1 Layer3.8 Ip2 Layer3.9 Loss Layer 1. 初見LeNet原始模型 Fig.1. Architecture of original …

Git(8)-分支

分支1. 分支名2. 創建分支-git branch3. 查看分支-git show-branch4. 檢出分支4.1 有未提交的修改時進行檢出4.2 合并變更到不同的分支git checkout -m5. 分離HEAD 分支6.刪除分支分支操作命令概覽 git branch # 列出版本庫中的分支 git branch -r # 列出遠程跟蹤分支…

caffe開始訓練自己的模型(轉載并驗證過)

學習caffe中踩了不少坑,這里我參考了此博主的文章,并體會到了如何訓練自己的模型:http://www.cnblogs.com/denny402/p/5083300.html 學習caffe的目的,不是簡單的做幾個練習,最終還是要用到自己的實際項目或科研中。因…

leetcode169. 多數元素

給定一個大小為 n 的數組,找到其中的多數元素。多數元素是指在數組中出現次數大于 ? n/2 ? 的元素。 你可以假設數組是非空的,并且給定的數組總是存在多數元素。 示例 1: 輸入: [3,2,3] 輸出: 3 示例 2: 輸入: [2,2,1,1,1,2,2] 輸出: 2 思路&…

Git(9)-diff

分支1. diff in Linux/Unix2. diff in Git3. git diff 兩點語法Linux/Unix 系統中存在diff 命令,可以用來顯示兩個文本/工作路徑的差異。Git diff 在此基礎上進行的擴展。 1. diff in Linux/Unix Linux 系統中的diff 命令:提供了一個文件如何轉化為另一…

圖像拼接(一):柱面投影+模板匹配+漸入漸出融合

這種拼接方法的假設前提是:待拼接的兩幅圖像之間的變換模型是平移模型,即兩幅圖像同名點位置之間只相差兩個未知量:ΔxΔx 和ΔyΔy,自由度為2,模型收得最緊。所以只有所有圖像都是用同一水平線或者同一已知傾斜角的攝…

圖像拼接(二):OpenCV同時打開兩個攝像頭捕獲視頻

使用OpenCV實現同時打開兩個USB攝像頭,并實時顯示視頻。如果未檢測有兩個攝像頭,程序會結束并發出“攝像頭未安裝好”的警告。這里推薦一個小巧的攝像頭視頻捕捉軟件:amcap,使用它可以方便的檢查每個攝像頭是否能正常工作。 捕獲…

Git(10)-merge

Merge1. 無沖突合并2. 有沖突合并-手動解決3. git diff in merge4. 廢棄合并5. 合并策略merge相關的操作的命令 git checkout master git merge alternate # 解決沖突 ..... git add file_1 git commit -m "Add slternate line 5, 6" git reset --hard HEAD # b…

elasticsearch的Linux下安裝報錯問題解決

1.啟動報錯如下: vim /etc/security/limits.conf 然后修改如下 * soft nofile 65536 * hard nofile 65536sudo vi /etc/pam.d/common-session 添加 session required pam_limits.so sudo vi /etc/pam.d/common-session-noninteractive 添加 session required pam_limits.so…

leetcode120. 三角形最小路徑和

給定一個三角形,找出自頂向下的最小路徑和。每一步只能移動到下一行中相鄰的結點上。 例如,給定三角形: [ [2], [3,4], [6,5,7], [4,1,8,3] ] 自頂向下的最小路徑和為 11(即,2 3 5 1 11&#xff0…

Elasticsearchan相關插件和工具安裝

1、下載elasticsearch-head的源碼包 地址:https://github.com/mobz/elasticsearch-head/releases 2、安裝node運行環境 地址:https://nodejs.org/en/download/ 3、安裝完node之后編譯elasticsearch-head 執行npm install -g grunt-cli編譯源碼 執行…

Git(11)-cherry-pick、reset、rebase

更改提交,版本回退1.get reset 重置HEAD指針的指向2.git cherry-pick3.git revert4.git commit --amend修改提交5.git rebase 變基提交5.1 git rebase --onto5.2rebase 產生沖突,解決沖突/終止變基5.3git rebase -i6. rebase Vs mergegit 提供了【修改】…

Elasticsearch集群節點配置詳解

注意:如果是在局域網中運行elasticsearch集群也是很簡單的,只要cluster.name設置一致,并且機器在同一網段下,啟動的es會自動發現對方,組成集群。 三、配置淺涉 elasticsearch的config文件夾里面有兩個配置文件&#…

MongoDB修改器使用

歡迎關注我的新微信公眾號 ipgame,有什么問題可以提供交流的平臺,歡迎大家討論。 對于文檔的更新除替換外,針對某個或多個文檔只需要部分更新可使用原子的更新修改器,能夠高效的進行文檔更新。更新修改器是中特殊的鍵, 用來指定復雜的操作,比如增加、刪除或者調整鍵,還…

Git(12)-stash, reflog

git stash1. git stash2. reflog命令概覽git stash save "WIP:xxxxx" # save后可以跟筆記,WIP:work in process git stash list # 查看存儲狀態棧的條目 git stash pop # 當前工作目錄和索引還原至最近一次save操作的內容…

cmake生成Win64位工程

使用cmake編譯64的dll 一開始使用cmake --build .來生成了dll,在導入到java項目中使用的時候,才發現是32位的。導致程序不能正常運行,報錯如下: Exception in thread "main" java.lang.UnsatisfiedLinkError Cant load…

leetcode 106. 從中序與后序遍歷序列構造二叉樹

根據一棵樹的中序遍歷與后序遍歷構造二叉樹。 注意: 你可以假設樹中沒有重復的元素。 例如,給出 中序遍歷 inorder [9,3,15,20,7] 后序遍歷 postorder [9,15,7,20,3] 返回如下的二叉樹: 3 / \ 9 20 / \ 15 7 思路:和前…