常用命令git本地

2021-12-30 09:10:34 字數 3724 閱讀 8921

兩個檔案:source.txt target.txt

hello world41

重置檔案:git reset [-q] -- paths

不影響工作區、暫存區、版本庫。

用commit中的檔案覆蓋相當於將檔案從暫存區中拿出來,恢復到沒有add

切換分支 git checkout -- file:用暫存區的檔案覆蓋工作區檔案 git checkout commit file: 用commit中的檔案覆蓋 暫存區和工作區

.gitignore 對未跟蹤的檔案有效,

範圍:所在目錄及子目錄起作用。共享式,會隨著專案而生效

如果檔案被忽略,可以使用 git add -f file 來新增檔案,新增進去的檔案將不受 .gitignore 影響

.git/info/exclude 專案獨享式 git config —global core.excludesfile ~/.gitignore: 全域性獨享式,對所有的git專案都起作用

git archive -o targe.zip head git archive -o partial.tar head src doc git. archive —format=tar —prefix=1.0/ v1.0 | gzip > foo-1.0.tar.gz;

使用 tag,最後會產生1.0目錄,下面是tag v1.0 的所有檔案

`git clean -n -fd` : - `-n` 顯示即將刪除的檔案; - 這裡的刪除是 __`git` 不追蹤__,並不刪除物理檔案

git stash: 缺省會重置工作區和暫存區

--keep-index:不會重置暫存區 "message": 儲存進度時留下提醒資訊

3 步走:挑選提交 — 切換到當前分支 — 覆蓋工作區和暫存區

- git cherry-pick commit

- git checkout currentbranch

- git reset --hard head@

挑選指定提交放入到當前的head;

假設有 a b c d e f 這6個提交記錄, 現要挑選 e f 並放到c上,即刪除d,如下:

git checkout 到指定提交: git checkout d^ git cherry-pick e:將提交點 e 放入當前head, head前進一步指向e。 git cherry-pick f:將提交點 f 放入當前head, head前進一步指向tagf。 git checkout dev; git reset --hard head@: git checkout dev也會產生乙個commit,所以應該使用head@ 來覆蓋當前的版本庫。 結束,其中上一步是至關重要的。

將 c 和 d 的提交說明合併為乙個提交說明,這裡合併為c的提交說明。

因為只是合併提交說明,所以,

應該將版本庫 git reset --soft 到 b;

工作區和暫存區git checkout d, 然後commit 產生一條新的記錄,

並將 e f 放到當前head

git checkout d:工作區和暫存區切換到d git reset --soft head^^: 版本庫切換到 b git commit -c c:使用 c 的提交說明,進行提交 git cherry-pick e, git cherry-pick f:將 e 和 f 重放到當前的head git checkout dev, git reset --hard head@: 覆蓋工作區

git rebase --onto base since_commit till_commit

3 步走:切到新的 head(乙個 commit)— 揀選區間 — 更新工作區和暫存區

變基操作:git cherry-pick 乙個乙個挑選,git rebase 挑選 (since_commit, till_commit] 區間段的提交

刪除提交d:

git checkout d^: git rebase --onto= head e^ dev: 相當於

gitgit rebase --onto= head e^ f

git checkout dev

git reset --hard head@

合併提交c 和 d:git checkout d git reset --soft head^^:版本庫回退到b(c的前面提交) git commit -c c:使用提交 c 的提交記錄作為新的提交記錄 git rebase --onto=head e^ dev:將 [e, ] 區間的提交放入 head上,並修改工作區和暫存區。

以 commit 作為head 進行互動式 git rebase,通過編輯 編輯操作檔案來完成相應的工作。

這裡刪除的是提交說明,而不是提交!

2 步:構造乙個新的根提交 — 將想要儲存的提交歷史說明變基到該新的提交

只保留 b 之後的提交說明,如下:

構造乙個新的根提交

git commit-tree b^ -m commit-log: 得到乙個commit-id 0a47615cc90f6a5b82。 將 b 的將提交記錄中 parent-commit 刪除,將剩下的資訊作為 commit 物件 寫入物件庫,構造成為乙個根提交。

# 1. 提交 b 的 log

git cat-file commit b^0 :

tree e0e82db036311d293e97d4cab06194fc2f999d14

parent e5724199303f41c6fbdbaa6e43896c98f041367c

author jack 1533474089 +0800

committer jack 1533474089 +0800

b # 2. 儲存去除 parent 之後的資訊, 儲存到 tmpfile

git cat-file commit b^0 | sed -e "/^parent/d" > tmpfile

tmpfile 內容:

tree e0e82db036311d293e97d4cab06194fc2f999d14

author jack 1533474089 +0800

committer jack 1533474089 +0800

b # 3. 將 tmpfile 內容寫入物件庫,形成新的根提交

git hash-object -t commit -w tmpfile

-t: 指定產生的物件的類別

-w: 指定寫入物件庫的檔案

產生 commit-id:bee2b046d9d36a18d1c3e95077a92014b4b5bf89將b^ dev 的提交記錄變基到新的根提交:

git rebase --onto=bee2b046d9d36a1 b^ dev

最終提交記錄:

5172477f5b4d4c56828461ded63447fee869b4dd (head -> dev) g

2113fa495b5c084b286e18ada708826a9e4d3a85 f

83a66109b5a4922a770a914e608d65d003646749 e

a2cafa33143a369be71faa02ddb329266541f2fc d

a68285d9a1832e508429a0b9f39fa638d9dbf667 c

bee2b046d9d36a18d1c3e95077a92014b4b5bf89 bgit revert commit-id : 撤銷 commit-id 對應的提交,但是不會刪除commit-id 的提交記錄,這是需要手動刪除的.

常用命令 Git 常用命令大全

安裝教程可參照 廖雪峰老師的安裝教程。git config 在git中,使用git config 命令來配置 git 的配置檔案,git配置級別主要有3類 1 倉庫級別 local 本地 git 倉庫級別配置檔案,作用於當前倉庫。優先順序最高 2 使用者級別 global,全域性配置檔案,作用於所有...

Git本地庫常用命令集

以下所有的git命令都是在測試目錄 git 下進行的.mkdir git git init git config user.name leslie git config user.email leslie leslie.com git config global user.name leslie g...

Git本地庫常用命令集

以下所有的git命令都是在測試目錄 git 下進行的.mkdir git git init git config user.name leslie git config user.email leslie leslie.com git config global user.name leslie g...