轉載請註明來源 "https://www.cnblogs.com/sogeisetsu/p/11410219.html" 創建git用戶 初始化一個Git倉庫,使用 命令。 添加文件到Git倉庫,分兩步: 使用命令 ,註意,可反覆多次使用,添加多個文件; 使用命令 ,完成上傳到庫 有可能是上傳log ...
轉載請註明來源https://www.cnblogs.com/sogeisetsu/p/11410219.html
創建git用戶
$ git config --global user.name "Your Name"
$ git config --global user.email "[email protected]"
初始化一個Git倉庫,使用git init
命令。
添加文件到Git倉庫,分兩步:
使用命令git add <file>
,註意,可反覆多次使用,添加多個文件;
使用命令git commit -m <message>
,完成上傳到庫
git commit
有可能是上傳log
add 是文件到暫存區
commit 是文件到庫 多次add,一次commit
比較工作區與暫存區
git diff
不加參數即預設比較工作區與暫存區
比較暫存區與最新本地版本庫(本地庫中最近一次commit的內容)
git diff --cached [<path>...]
比較工作區與最新本地版本庫
git diff HEAD [<path>...]
如果HEAD指向的是master分支,那麼HEAD還可以換成master
比較不同分支文件差異
git diff branch1 branch2 --stat //顯示出所有有差異的文件列表
git diff branch1 branch2 具體文件路徑 //顯示指定文件的詳細差異
git diff branch1 branch2 //顯示出所有有差異的文件的詳細差異
此片段為CSDN博主「古飛龍」的文章
查看狀態
git status
是狀態
git reset --hard HEAD^
是回到某版本,回到前100個版本用git resert --hard HEAD~100
,以此類推。
git resert --hard HEAD^
是回到前一個版本,以此類推
Git鼓勵大量使用分支:
查看分支:git branch
創建分支:git branch <name>
切換分支:git checkout <name>
創建+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch -d <name>
如果要丟棄一個沒有被合併過的分支,可以通過git branch -D <name>
強行刪除。
刪除遠程分支:
git branch -d -r
//刪除遠程分支,刪除後還需推送到伺服器,執行完這個命令後, git branch -a
就不顯示所刪除的那個遠程分支了,但依然可以在GitHub上看到那個分支,所以到這一步是可以恢復的
git push origin -d//刪除後推送至伺服器,直接執行這個命令可直接刪除,且無法恢復
合併分支
git merge
是合併
當Git無法自動合併分支時,就必須首先解決衝突。解決衝突後,再提交,合併完成。
解決衝突就是把Git合併失敗的文件手動編輯為我們希望的內容,再提交。
用git log --graph
命令可以看到分支合併圖。
合併分支時,加上--no-ff
參數就可以用普通模式合併,合併後的歷史有分支,能看出來曾經做過合併,而fast forward合併就看不出來曾經做過合併。
修複bug時,我們會通過創建新的bug分支進行修複,然後合併,最後刪除;
stash 暫存
當手頭工作沒有完成時,先把工作現場git stash
一下,然後去修複bug,修複後,再git stash pop
,回到工作現場;
git stash list
命令看看當前的stash列表
恢復stash前的狀態有兩種方式,一是用git stash apply
恢復,但是恢復後,stash內容並不刪除,你需要用git stash drop
來刪除;
另一種方式是用git stash pop
,恢復的同時把stash內容也刪了:
在master分支上修複的bug,想要合併到當前dev分支,可以用git cherry-pick <commit>
命令,把bug提交的修改“複製”到當前分支,避免重覆勞動。
恢復
git checkout -- file
是把工作區的某個文件恢復的和暫存區一樣,但是git checkout -- file
的file
是無法省略的,也就是說只能恢復某一個文件不能恢復全部文件。要恢復全部文件的話要用git reset --hard HEAD
。
git reset HEAD file
是把暫存區的文件恢復到和庫一樣的狀態。
git reset --hard HEAD^
工作區和暫存區是回到某版本,回到前100個版本用git resert --hard HEAD~100
,以此類推。
git resert --hard HEAD^
是回到前一個版本,以此類推。
撤銷修改
一般情況下是這樣的,如果修改了一個文件,並且想要撤銷修改的話,文件有以下幾種狀態
- 只是工作區的某一個文件修改了,用
git checkout -- file
- 工作區的修改已經提到暫存區了,先用
git reset HEAD
取消暫存區的修改,然後用git checkout -- file
取消工作區的修改。git checkout -- file
其實是把某個文件恢復的和暫存區一樣。 - 如果已經提到庫的話,用
git reset --hard HEAD^
來回到前一個庫的狀態。
git reset 產生影響,其中--mixed是預設狀態。索引可理解為暫存區。
git reset 的進一步解釋可以參考閱讀這個文章https://www.jianshu.com/p/cbd5cd504f14
從GitHub來看
git remote add oraign url
來關聯遠程庫。
git push -u oraign master
來推送到遠程庫
git push oraign
來推送其他分支
git pull
來獲取分支內容
git checkout -b dev origin/dev
創建遠程origin的dev分支到本地
git pull
把最新的提交從origin/dev抓下來
git fetch 和 pull
可以簡單的概括為:
git fetch是將遠程主機的最新內容拉到本地,用戶在檢查了以後決定是否合併到工作本機分支中。
而git pull 則是將遠程主機的最新內容拉下來後直接合併,即:git pull = git fetch + git merge,這樣可能會產生衝突,需要手動解決。
標簽
標簽讓人便於聯繫commit
命令git tag
用於新建一個標簽,預設為HEAD,也可以指定一個commit id;
命令git tag -a-m "blablabla..."可以指定標簽信息;
命令git tag可以查看所有標簽。
命令git push origin可以推送一個本地標簽;
命令git push origin --tags可以推送全部未推送過的本地標簽;
命令git tag -d可以刪除一個本地標簽;
命令git push origin :refs/tags/可以刪除一個遠程標簽。