Myth 關於Git的學習筆記
- 1 、雖然在物理上本地倉庫中所有檔案是放在一起的,但是分支之間是互不能訪問以及操作的
- 2 、在本地的每次commit都是有index的,上傳到github可以不用那麼頻繁,反正都是有記錄的
- 3、 在github上修改了專案後,或者以後是和別人一起開發,就要先git pull origin (master)將別人的分支和自己的分支都拉下來確保是最新,再進行git push -u origin master 才能正確提交程式碼,如果不pull,提交是註定失敗的,還會擾亂分支圖
- 4、在github上修改檔案,容易引起編碼的變化,這時候沒有pull就修改檔案再commit也是會在push的時候很麻煩,最好在本地修改檔案
最好是,在github上修改了就在本地pull之後再修改檔案,萬一出錯了回退也簡單 -
5、出現了衝突,從而無法自動merge:
git pull 對方的分支 git checkout 自己的分支 git merge --no-ff 對方的分支 git push (自己的源+分支)origin master
- Windows下記住密碼 :
- 新建環境變數 HOME 值:
%USERPROFILE%
- 在C盤User下你的當前使用者目錄下新建
_netrc
文字檔案:machine
login ***
-
password ***
- 成功配置,測試便知
- 新建環境變數 HOME 值:
- Linux下記住密碼:
touch .git-credentials
vim .git-credentials
- 輸入:
http://{username}:{password}@github.com
或者是https開頭 git config --global credential.helper store
- ~/.gitconfig 檔案中多了以下內容即可
- [credential]
- helper = store
- 1.在GitHub上新建一個專案,不勾選初始化,複製下URL
- 2.在eclipse新建專案,git到本地某資料夾下
- 3 然後在eclipse裡新增git remote
- 4.commit -》push 完成
- 5.開啟Git Bash 使用命令列再檢視一下,雖然有時候問題比較奇怪,但是一般不會有啥問題
- 執行了1、2步驟後:直接
git remote add origin StudentManager.git
git push -u origin master
=====或者:=====
echo "# StudentManager" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin StudentManager.git
git push -u origin master
【git commit】
git commit 不帶命令:進入VI編輯器
第一行:用一行文字簡述提交的更改內容
第二行:空行
第三行:記述更改的原因和詳細內容
使用下面方法關閉退出
【git remote】
- 新增遠端關聯倉庫 git remote add origin URL地址
- 修改關聯倉庫 git remote set-url origin URL地址
【git push】
- 出現RPC failed; result=22, HTTP code = 411 的錯誤
- 就是因為一次提交的檔案太大,需要改大緩衝區 例如改成500m
- git config http.postBuffer 524288000
$git config --global user.name " "
$git config --global user.email " "
$git config --global color.ui auto
git 在pull或者合併分支的時候有時會遇到開啟 VI編輯器 的狀態 可以不管(直接下面3,4步)
如果要輸入解釋的話就需要:
1.按鍵盤字母 i 進入insert模式
2.修改最上面那行黃色合併資訊,可以不修改
3.按鍵盤左上角"Esc"
4.輸入":wq",注意是冒號+wq,按Enter鍵即可
Ctrl + Z +Z 也能退出
【Markdown語法】:
@使用者名稱, @組織名 ;#編號 會連線到該倉庫對應的Issue編號 。
透過 使用者名稱/倉庫名 #編號 來指定倉庫的指定Issue
【將Bash和GitHub繫結起來】:
1.在GItHub上設定SSH key, 有一個即可
2.$ssh-keygen -t rsa -C "Kuangchengping@outlook.com" 回車
3.設定密碼 ad14293366
4.測試SSH $ssh -T git@github.com 輸入yes 輸入 密碼 ****
【 .gitingnore 檔案】 :
test.txt 忽略該檔案
*.html 忽略所有HTML檔案
*[o/a] 忽略所有o和a字尾的檔案
!foo.html 不忽略該檔案
-
示例檔案
# maven # target/ # IDEA # .idea/ *.iml out/ # eclipse # bin/ .settings/ .metadata/ .classpath .project Servers/
克隆專案: $git clone URL
- 1.先在GitHub上建立一個倉庫,不勾選Initialize...(原因是等會連遠端倉庫還得pull一下才能push)
- 2.若在某已有倉庫下:在那個目錄下執行Git Bash
- 2.1 mkdir 庫名 建立一個資料夾,最好和遠端的庫同名
- 2.2 git init 初始化(建立 .git 相關檔案) touch 一個README.md
- 2.3 git remote add origin master URL 連上遠端倉庫
- 2.4 git push -u origin master 輸入使用者名稱,密碼(若因為沒有上游節點就按提示輸入命令建立初始節點即可)
git touch file1 file2 新建三個檔案
echo " ">>file1 修改檔案file1
git rm 檔名 : 刪除檔案至快取區
vi 檔名 : 使用VI編輯器來新建檔案 要特別注意其退出
git commit -am " " 從快取提交(切記要先 commit 才能 push)
git diff : 檢視當前工作樹和暫存區的差別
git diff --cached :檢視快取中檔案修改的痕跡和對比 輸入q 退出
git log --graph :檢視(圖形化)提交日誌 輸入q退出
git banrch 分支名 :建立新的分支
git branch -a 檢視當前分支資訊
git checkout -b:建立一個分支,並立即切換
git checkout -b feature-D origin/feature-D 新建一個分支來接收同步後面那個遠端倉庫的分支
git pull :獲取最新的遠端倉庫分支
git pull origin feature-D :只把本地的feature-D分支更新到最新
git merge--no-ff feature-D 將當前分支與分支feature-D 合併
git reset --hard 雜湊值:資料庫的回滾操作似的
git reflog 檢視倉庫的操作日誌
git mv -k oldName newName :更改檔名字
usage: git [--version] [--help] [-C ] [-c name=value]
[--exec-path[=]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=] [--work-tree=] [--namespace=]
[]
API文件
These are common Git commands used in various situations:
start a working area (see also: git help tutorial)
clone Clone a repository into a new directory
init Create an empty Git repository or reinitialize an existing one
work on the current change (see also: git help everyday)
add Add file contents to the index
mv Move or rename a file, a directory, or a symlink
reset Reset current HEAD to the specified state
rm Remove files from the working tree and from the index
examine the history and state (see also: git help revisions)
bisect Use binary search to find the commit that introduced a bug
grep Print lines matching a pattern
log Show commit logs
show Show various types of objects
status Show the working tree status
grow, mark and tweak your common history
branch List, create, or delete branches
checkout Switch branches or restore working tree files
commit Record changes to the repository
diff Show changes between commits, commit and working tree, etc
merge Join two or more development histories together
rebase Forward-port local commits to the updated upstream head
tag Create, list, delete or verify a tag object signed with GPG
collaborate (see also: git help workflows)
fetch Download objects and refs from another repository
pull Fetch from and integrate with another repository or a local branch
push Update remote refs along with associated objects
'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help ' or 'git help '
to read about a specific subcommand or concept.
【git reset常用方式】 (1):回滾add操作
edit (1)
git add a.txt b.txt
看郵件(2)
git reset(3)
git pull URL
1.1 編輯了兩個檔案並且新增到了index
1.2 接收郵件,發現某人要你pull,有一些改變需要你merge 下來
1.3 然而你已經把index給改變了,因為當前的index 和 HEAD commit不匹配了,但是你知道,即將pull的東西不會影響
到a.txt 和 b.txt,因此你可以revert這兩個檔案的改變,revert後,那些改變依然在working directory中,因此需要執行git reset
1.4 然後,執行了pull後 自動merge,兩個檔案依然在working directory中
(2):回滾最近一次commit
git commit ...
git reset --soft HEAD^(1)
edit (2)
git commit -a -c ORIG_HEAD(3)
2.1 當提交後,你發現提交的程式碼不完善,需要重新編輯一下,執行 1 語句讓working directory和reset之前一樣,不做改變
2.2 對working tree下的檔案做修改
2.3 然後使用reset之前那次commit的註釋等相關資訊都重新提交,注意老的HEAD會被備份到檔案.git/ORIG_HEAD中,命令中就是引用了這個老的相關資訊
-a 表示自動將所有的修改的和刪除的檔案都放進 stage area(理解為程式碼區,未被git跟蹤的檔案不受影響)
-c 表示 拿已經提交的commit物件中的資訊來做這次的提交
這條命令就是,將所有更改的檔案加入到stage area中,並使用上次的提交資訊來提交
(3):回滾最近幾次的commit,並新增到一個新建的分支上去
git branch myth/test (1)
git reset --hard HEAD^3 (2)
git checkout myth/test (3)
3.1 你已經提交了好幾個commit,但是覺得不夠成熟和完善,不足以新增到master分支上,所以在當前HEAD建立一個新分支
3.2 然後回滾掉最近三次提交(刪除)
3.3 切換到新分支上就能對程式碼進行潤色了,等待之後的merge
(4):永久刪除最近幾次
-
commit git reset --hard HEAD~3
(5):回滾merge和pull操作
git pull URL (1) git reset --hard (2) git pull .topic/branch (3) git reset --hard ORIG_HEAD (4) 5.1 從origin上拉下來一些更新,但是產生了許多衝突,暫時又沒時間去解決這些衝突,所以想撤銷pull操作,等待以後來pull 5.2 由於pull操作產生了衝突,因此所有pull下來的改變尚未提交,仍然在stage area中,這種情況下 git reset --hard 與 git reset --hard HEAD 效果一樣 都是清除那些使index和working directory亂套的東西 5.3 將topic/branch 合併到當前的branch,這次沒有衝突,並且合併後的更改自動提交 5.4 但是此時又覺得將topic/branch合併過來又太早了,決定回滾merge操作,執行4語句 之前有說過,git reset操作會備份一個ORIG_HEAD, pull和merge操作同樣會,為了回滾操作
(6):在被汙染的working tree中回滾merge或者pull
git pull (1) git reset --merge ORIG_HEAD (2) 6.1 即使在本地已經更改了tree,導致了index的變化,也可以放心的pull,前提是你知道將要pull的內容不會覆蓋你的working tree中的內容 6.2 git pull 之後,你發現這次pull的有問題,想要撤銷操作,如果使用git reset --hard ORIG_HEAD也可以,但是這會刪除add的程式碼 使用 git reset --merge ORIG_HEAD 就可以避免回滾操作時刪除add的程式碼
(7):被中斷的工作流程
在實際開發中經常出現這樣的情形:你正在開發一個大的feature,此時來了一個緊急的BUG需要修復,但是目前在working tree 中的內容還不足以commit ,但是又必須切換到另外的branch去 fix bug git checkout feature; 碼程式碼 git commit -a -m "暫時中斷OO" (1) git checkout master 修復bug git commit ; git checkout feature git reset --soft HEAD^ #go back to OO's state (2) git reset (3) 7.1 屬於臨時提交。隨便加點註釋 7.2 這次reset刪除了OO的commit,並且把working tree設定成提交OO之前的狀態 7.3 此時,在index中仍然留有OO提交時所做的uncommit changes,git reset 將會清理index成為尚未提交時的狀態,便於之後的工作
(8):Reset 一個單獨的檔案
git reset -- a.txt (1) git commit -am "Commit files inindex" (2) git add a.txt (3) 8.1 把檔案單獨從index中去除 8.2 將index中的檔案提交 8.3 再次新增回檔案
(9):保留working tree 並且丟棄一些commit
git tag start git checkout -b branch 1 編寫 git commit .... (1) 編寫 git checkout -b branch2 (2) git reset --keep start (3) 9.1 這次是把branch1中的改變提交了 9.2 此時發現,之前的提交不屬於這個branch,此時你新建了branch2,並切換到了該branch上 9.3 此時你可以使用reset --keep 把在start之後的commit清除掉,但是保持了working tree的不變
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4550/viewspace-2807729/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- git學習筆記Git筆記
- 關於http(自己的學習筆記)HTTP筆記
- Git 的特點—— Git 學習筆記 02Git筆記
- Pro Git 學習筆記Git筆記
- git學習筆記 1Git筆記
- git學習筆記1Git筆記
- Git和Maven的學習筆記GitMaven筆記
- git入門學習筆記Git筆記
- Git極簡學習筆記Git筆記
- git rebase(變基)—— Git 學習筆記 19Git筆記
- 取得 Git 倉庫 —— Git 學習筆記 04Git筆記
- git checkout 和 git reset 的區別 —— Git 學習筆記 09Git筆記
- 關於django reset_framework學習之路的筆記DjangoFramework筆記
- 20190228 學習筆記——廖雪峰 git筆記Git
- Git 簡單使用學習筆記Git筆記
- Git 分支的建立與切換 —— Git 學習筆記 14Git筆記
- Git 的安裝與初次使用 —— Git 學習筆記 03Git筆記
- git checkout 命令詳解—— Git 學習筆記 16Git筆記
- git status 命令總結 —— Git 學習筆記 06Git筆記
- git學習:關於origin和masterGitAST
- XML學習筆記(一):關於字元編碼的理解XML筆記字元
- 關於網路安全的逆向分析方向學習筆記筆記
- 撤銷操作 —— Git 學習筆記 12Git筆記
- git cherry-pick 詳解 —— Git 學習筆記 18Git筆記
- git reset 命令詳解(一)—— Git 學習筆記 07Git筆記
- git reset 命令詳解(二)—— Git 學習筆記 08Git筆記
- 廖雪峰Git學習筆記1-Git簡介Git筆記
- 一份關於 Java、Kotlin 與 Android 的學習筆記JavaKotlinAndroid筆記
- php 學習筆記之關於時區的那點事PHP筆記
- C#關於List<T>的自定義排序學習筆記C#排序筆記
- git checkout 對工作目錄的影響 —— Git 學習筆記 21Git筆記
- Git 的工作區、暫存區、版本庫—— Git 學習筆記 15Git筆記
- 忽略某些檔案 —— Git 學習筆記 05Git筆記
- GIT學習筆記——第一章Git筆記
- git 學習筆錄Git
- 【學習筆記】關於Freemark程式碼輸出值的問題筆記
- numpy的學習筆記\pandas學習筆記筆記
- Javascript中的關鍵字'this'學習筆記JavaScript筆記