Git
基礎
- .gitignore中指定不需要Git管理的文件
- 不要對公共分支進行rebase
.git目錄
- HEAD:保存了當前分支的文件目錄路徑
- config:保存了local作用域的配置
- refs:該目錄存放了本項目所有分支和tag相關的信息
- objects:該目錄
對象
git cat-file -t [hashcode]查看對象的類型
git cat-file -p [hashcode] 查看對象的內容
commit
tree
- 文件目錄對象
blob
- 文件對象
- 對象的內容就是文件的內容
Git命令
git config --list //查看所有配置
git config --add --local <key> <value> //對當前倉庫進行配置
git config --get <key> //獲取配置值
git config --global //全局配置
git init //將已有項目加入git管理
git init myProject //創建myProject文件夾,並把它納入GIT管理
git add [filename] //將文件或文件的改動納入git管理
git add -u // 將所有修改添加到暫存區等待被提交
git mv file1 file2 //重命名文件
git rm <filename> //將文件從暫存區和工作區刪除
git log --oneline //簡潔地瀏覽變更歷史
git log --all //查看所有分支的變更歷史
git log --graph //增加分支視圖
git checkout <branchName> //切換分支
git checkout -- [filename] //將工作區的修改撤銷,恢復成和暫存區一致
git checkout -b <branch_name> <remote_repo> // 在本地倉庫創建和遠端倉庫一樣的分支,並關聯起來,同時切換到該分支
git cat-file -t [hashcode] //查看對象的類型
git cat-file -p [hashcode] //查看對象的內容
git diff [commit1] [commit2] //比較兩個commit之間的差異
git diff <分支1> <分支2> //比較分支1和分支2的差異
git diff //比較工作區和暫存區的差異
git diff -- [filename] //比較指定文件在工作區和暫存區的差異
git diff --cached //比較暫存區和HEAD的差異
git reset HEAD //將暫存區的修改撤銷,恢復成和HEAD一致
git reset HEAD -- <filename> //將暫存區指定文件的修改撤銷,恢復成和HEAD一致
git reset --hard <hashcode> //將hashcode之前的commit全部撤銷,暫存區和工作區的相關記錄也會同時被撤銷,很危險的操作
git branch -d [branchName] //刪除一個已經合併的分支
git branch -D [branchName] //強制刪除一個分支,不管它是否已經合併
git commit --amend //修改上一次提交的變更說明
git commit -am //提交所有修改
git rebase -i [hashCode] //在該commit上進行重新奠基,其中,pick:保持該提交不變 reword:修改該提交的變更說明 squash:把該提交合併到上一次提交中
git rebase --abort //丟棄掉未完成的rebase操作
git stash //將當前暫存區的修改清空放到一個緩存堆棧中,有需要再恢復出來
git stash pop //將緩存堆棧中的修改恢復到暫存區,同時刪除堆棧中該條記錄
git stash apply //將緩存堆棧中的修改恢復到暫存區,但不刪除堆棧中該條記錄
git stash list //查看緩存堆棧中的記錄
git clone <projectUrl/.git> <backupname.git> //將git項目備份到本地
git clone --bare <projectUrl/.git> <backupname.git> //將git項目備份到本地,不覆蓋工作區
git remote -v //查看遠端倉庫
git remote add <remote_repo_name> <url> //添加遠端倉庫
git push origin <local>:<remote> //把本地修改提交到遠端
git push <remote_repo_name> //把本地修改推到遠端倉庫
git push -f origin master //把遠程分支強制回退到當前時間點
git pull //把遠端分支的修改拉下來,並更新本地分支,包含了fetch和merge兩個操作
git fetch //從遠端拉去代碼到本地
git merge <分支1> <分支2> //合併分支
git merge <遠端分支> //合併遠端分支
GitHub
- 權限設置:Settings->Branches->Add rule
三種Pull Request的區別
- GitHub的Setting設置中有一個Merge button選項,用於設置允許的分支合併類型,一共有如下三種類型:
- merge commits:將分支合併到主幹中,類似於執行git merge命令
- squash merging:將分支的所有改動合併成一個併合併到主幹中,合併後分支的狀態不變
- rebase merging:將分支的所有改動合併到主幹中,合併後分支的狀態不變