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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

git使用总结

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

以前只是簡單git簡單用法,并有遠程merge權限,但現在由于沒有merge權限,所以使用上存在一定問題。

問題1git push失敗,顯示有沖突,只能git pull產生沖突,自動merge會進行,產生新的提交,兩次commit提交含有merge會被Leader否決。

改進方法。add之前,

  • 有兩種方法來把你的代碼和遠程倉庫中的代碼合并

    a. git pull這樣就直接把你本地倉庫中的代碼進行更新但問題是可能會有沖突(conflicts),個人不推薦

    b. 先git fetch origin(把遠程倉庫中origin最新代碼取回),再git merge origin/master(把本地代碼和已取得的遠程倉庫最新代碼合并),如果你的改動和遠程倉庫中最新代碼有沖突,會提示,再去一個一個解決沖突,最后再從1開始

  • 如果沒有沖突,git push origin master,把你的改動推送到遠程倉庫中。

  • 如果兩個merge后,產生兩個commit,然后pull是up-to-date狀態,合并成一個的方法

    git reset 前一個commit ID

    git stash

    git stash drop

    丟棄

    git reset?前一個commit ID

    git stash

    git pull

    git stash pop

    git add .

    git commit -m ""

    git push

    問題2:提交時根本沒有branch,提交失敗。

    ?解決方法:repo sync后沒有? repo start --all <branchname> #這一步不能漏掉,否則克隆的所有倉庫默認處于no branch狀態,容易導致后面工作時添加的代碼丟失。

    問題3:1個大項目,本地多個branch,且各自git提交在不同branch,盡管小的git成功提交和小的mm編譯成功,但造成最后大項目整體編譯會出現問題。編譯是以branch進行的,盡管子模塊git編譯都沒有問題,但整體編譯時子模塊不同branch造成各個Branch不是最新代碼,所以失敗。

    解決辦法:

    方法一:暴力法,效果最好。1:新建branch,并將舊分支進行強制刪除。,2:更新新建branch。repo sync,3repo start --all <branchname>,其中 branchname用新建branc名字。

    方法二:解決各自Branc沖突,將代碼stash后,重新拉取新代碼,2:更新各個branch。repo sync,3repo start --all <branchname>,其中 branchname用希望編譯的branch名字。

    問題4:打補丁方式。

    首先,打補丁命令git commit --amend --no-edit 。

    打補丁建議不更新,直接打補丁。一旦更新,打補丁會出現問題。

    ?

    問題5:git rebase使用(轉自https://blog.csdn.net/TTKatrina/article/details/79288238)

    使用git版本管理工具,必問git rebase的用法,但之前項目組人數5人,一直使用的是git pull,git commit 和git push,幾乎沒有用git rebase來變基,減少難看的merge 類型的commit。
    最近一個新項目,兩地合作辦公大概有10人共用一個項目分支,幾分鐘內可能有多人提交,造成連續多個merge在gitk的路徑中,看不清某個人某次有價值的提交是哪一條,故組長建議大家使用git rebase。

    看了2015年多個博客,前人栽的樹,整理如下,方便新人查看。


    merge和rebase解決沖突的差別圖不貼了,主要是新使用的時候不知道寫什么命令行。
    命令行的使用直接上代碼,git rebase 替代 git merge 大致過程:

    git stash git pull —rebase git stash pop 手動解決沖突 git add -u git rebase —continue 如果此時提示No rebase in progress?則表示已經沒有沖突了;否則上面兩步要重復多次 git commit -m “xxx” git push origin [branch] -f
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    附錄前人博客鏈接:
    簡單對比git pull和git pull –rebase的使用

    [精華部分]使用下面的關系區別這兩個操作:
    git pull = git fetch + git merge
    git pull –rebase = git fetch + git rebase

    (附圖解)git pull –rebase 做了什么? 以及 Cannot rebase: You have unstaged changes 解決辦法

    很喜歡如下圖:

    git pull –rebase 理解
    這個命令做了以下內容:
    a.把你 commit 到本地倉庫的內容,取出來放到暫存區(stash)(這時你的工作區是干凈的)
    b.然后從遠端拉取代碼到本地,由于工作區是干凈的,所以不會有沖突
    c.從暫存區把你之前提交的內容取出來,跟拉下來的代碼合并
    所以 rebase 在拉代碼前要確保你本地工作區是干凈的,如果你本地修改的內容沒完全 commit 或者 stash,就會 rebase 失敗。

    還附上了git add -u的解釋:

    git add 的幾種參數區別:
    git add -A 保存所有的修改
    git add . 保存新的添加和修改,但是不包括刪除
    git add -u 保存修改和刪除,但是不包括新建文件。
    如果只想提交某個文件,可以使用git add 路徑/文件名 或者 git add 路徑/

    git rebase 使用詳解

    這一篇解釋了手動解決沖突時<<<<和=====的含義
    一般情況下rebase都是會有沖突的,詳細查看沖突可以用命令git status然后就會顯示哪個文件有沖突,然后打開有沖突的哪個文件,會發現有一些“<<<<<<<”, “=======”, “>>>>>>>” 這樣的符號。

    <<<<<<<” 表示沖突代碼開始“=======” 表示test與master沖突代碼分隔符 “>>>>>>>" 表示沖突代碼的結束 <<<<<<< 所以這一塊區域test的代碼 ======= 這一塊區域master的代碼 >>>>>>>

    對于rebase的工作流以代碼的形式也體現的很清楚:

    git rebase while(存在沖突) {git status找到當前沖突文件,編輯解決沖突git add -ugit rebase --continueif( git rebase --abort )break; }

    除去替代merge,git rebase還有合并多個commit的功能,如下取自知乎:
    (知乎)git rebase有哪些用法?
    原文似乎不樂意被轉載,簡單記錄如下,明細還是看原帖子。還沒試驗過,先記錄如下:

    兩種經典用法
    問題場景1.如何刪除歷史中某項提交?
    【案例】去除提交列表中的某個commit,例如在master分支上A->B->C->D->E->F, 除去D。
    方案一:
    git checkout C //將HEAD切換到C提交
    git cherry-pick master^ //master^即E,將E放在C后面,E的HSA1值改變
    git cherry-pick master //master即F,將F放在E后面,F的HSA1值改變
    git checkout master //將HEAD切換到master分支
    git reset –hard HEAD@{1} //將HEAD切換到最新的F
    方案二:
    采用變基的方式
    git rebase –onto C E^ F //前后開閉區間,E^即D,表面C后面加上(D,F]
    git checkout master
    git reset –hard HEAD@{1}
    方案三:
    交互式變基
    git rebase -i D^
    然后刪除第一行(?沒明白意思)

    問題場景2.如何合并歷史提交?
    【案例】在master分支上A->B->C->D->E->F, 合并D到C,即A->B->CD->E->F。
    方案一:
    git checkout D
    git reset –soft HEAD^^
    git commit -c C//-c表示重用C的提交信息
    git cherry-pick E
    git cherry-pick F
    git checkout master
    git reset –hard HEAD@{1}
    方案二:
    用變基命令
    git checkout D
    git reset –soft HEAD^^
    git commit -c C//-c表示重用C的提交信息
    git tag newbase
    git rebase –onto newbase E^ master
    git tag -d newbase//清理該tag
    方案三:交互式變基
    git rebase -i C^
    將第二行的pick更改為squash,二者將合并(?還是沒明白意思)


    ?

    轉載于:https://www.cnblogs.com/zhougong/p/9128303.html

    總結

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

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