Git学习记录(一)
git-book?全面資料
- git 用樹形查看 (git 命令代替gitk查看節點樹
?part two?
日常使用只要記住下圖6個命令即可,但是學海無涯啊
?
常用 Git 命令清單。幾個專用名詞的譯名如下。
- Workspace:工作區
- Index / Stage:暫存區
- Repository:倉庫區(或本地倉庫)
- Remote:遠程倉庫
常用情景舉例?:
git diff?git statusgit add . ?or git ?add 指定文件git commit -m "information"git push origin hisense(當前本地,代碼修改所在分支名稱):guoqiang/information ? ?
or ?git push -f origin hisense:guoqiang/hisense(新建遠程分支名稱) ? ?
or? git push -f origin hisense:guoqiang/new name(文件截至上一次提交信息)
0.0 git 權限添加:Command line instructions
You can also upload existing files from your computer using the instructions below.
Git global setup
git config --global user.name "Guoqiang Zheng"
git config --global user.email "guoqiang.zheng@deptrum.com" ?添加密鑰到ssh:
ssh-keygen -t rsa -C "guoqiang_sunshine@163.com"
Create a new repository
git clone git@heptagon:inception/hisense-depth-application.git
cd hisense-depth-application
touch README.md
git add README.md
git commit -m "add README"
Push an existing folder
cd existing_folder
git init
git remote add origin git@heptagon:inception/hisense-depth-application.git
git add .
git commit -m "Initial commit"
Push an existing Git repository
cd existing_repo
git remote rename origin old-origin
git remote add origin git@heptagon:inception/hisense-depth-application.git
方法1:1 git cherry-pick替代git rebase,可以作為一種的rebase的方法
//替代rebase的一種新的方法,比較好用,記錄以下
1.第一步將修改的代碼,提交后利用squash壓縮成一個提交
2.第二步,分支更新到master,利用git cherry-pick 摘取壓縮后的提交
3.注意,git cherry-pick出現矛盾后,需要手動搜索沖突代碼,沒有辦法直接看到沖突的地方
4.提交后,查看檢驗格式域代碼
?
方法2:1 git--rebase
step1:首先切到本地master分支,更新到最新的遠程分支,或者更新到需要作為rebase基的分支
step2:切到待rebase的分支,執行:git checkout 當前分支名稱
git rebase master
step3: 根據提示處理conflict
step4: 對合并后的修改文件,git status查看,git add增加
step5: 繼續執行
git rebase --continues 直至出現Apply(表示rebase成功)
step6: git branch 查看,臨時分支已經消失,回歸正常流程,提交代碼(add,commit,push)
注意:
當重構代碼長時間沒有合并代碼的時候,會出現這種狀況。自己有很多次提交,落后master主分支有很多次提交,這個時候需要是使用
git rebase -i HEAD~13 //13表示落后的分支數目//針對自己的分支執行commit 信息壓縮,同時對主分支進行commit信息壓縮,
//最后在執行rebase,可以有效的減少rebase難度,達到最需要rebase一次既
//可以完成整體代碼的追趕
2 git squash,多個commit融合與修改提交
step1: 首先確保代碼已經rebase完成,查看落后提交分指數
step2:優先使用命令,因為git系統會自動定位到你自己的第一節點(git squash or git reabse or git cherry-pick)等
git rebase -i
step2:
git rebase -i HEAD~5 //5表示從當前分支數的commit信息
step3: 將待合并commit信息前a修改為s,使用#注釋掉不需要的commit信息
step4: VIM編輯器, Esc : wq! 即可
3?git have diverged
git出現Your branch and ‘origin/master’ have diverged解決方法
如果不需要保留本地的修改:
git fetch origin
git reset --hard origin/master
如果需要保留本地的修改:
git rebase origin/master
git pull --rebase
解決沖突
git rebase --continue
git push origin master
壓楠瓜舉例:
回退四個提交commit:
git rebase -i HEAD~4
?in the vim editor:
--命令git branch -a,列出所有分支,git branch dev 創建本地dev分區--命令git checkout dev 切換到dev分區,工作區變成dev分支的內容--命令git checkout –b dev 創建并切換到本地分支dev (其中,git branch dev 是創建本地分支dev ; ?git checkout dev 是切換分支)--命令git branch –d dev 刪除分支dev--命令git clone --recursive -b $分支 $遠程倉庫 $路徑
分支:master
遠程倉庫:ssh://git@git.dev.cnicgz.cn:6822/datacenter/maintain.git
路徑:/path/to/src
倉庫自動命名名為origin(origin相當于別名,運行git remote –v)--命令git status ?查看本地(工作區)更新還沒提交到本地分支的文件(實際文件目錄)--命令git commit -am "本次提交描述"(結合git add. 和 git commit -m)工作區內直接提交到本地分支
git add . 把本地更新還沒提交到本地分支的文件增加到暫存區==git stage .
git commit –m "本次提交描述" 把暫存區的內容提交到本地分支--命令git push origin 本地分支:遠程分支 ?
把本地分支內容提交到遠程分支,origin為默認遠程倉庫--命令git log 查看git commit 版本--命令git fetch 下載遠程更新,所有遠程倉庫內容下載到本地版本庫(.git)--命令git merge origin/cms 把當前本地分支和遠程指定分支進行merge, 若出現(XXX|MERGING)狀態, 利用 git diff 查看沖突無法解決的地方--命令git pull origin 等于 git fetch && git merge,盡量使用git fetch 和git merge (6、7步)來代替git pull--命令git stash 備份工作區內容(從最近commit中備份),然后可以進行修復bug,修復完利用git stash pop恢復工作區內容--命令git reset <commit_id> 默認-soft, 如果要hard程度就git reset --hard <commit_id>回退版本, 回退版本后想要回最新版本,--命令git reflog找到版本號后再次git reset <commit_id>--命令git rebase dev 把dev分支上的東西更新到當前分支上
修改了4個文件,在不放棄任何修改的情況下,其中一個文件不想提交,如何操作?(沒add : git add 已經add: git reset –soft ) 修改到一半的文件,突然間不需要或者放棄修改了,怎么恢復未修改前文件? (git checkout) 代碼寫一半,被打斷去做其他功能開發,未完成代碼保存?(git stash) 代碼寫一半,發現忘記切換分支了?(git stash & git checkout) 代碼需要回滾了(git reset
前后對比:
?
?
??
?
RK3399命令行記錄?
?
使用 tree .git查看文件關系
?
理論如下:
一、新建代碼庫?
?
二、配置
Git的設置文件為.gitconfig,它可以在用戶主目錄下(全局配置),也可以在項目目錄下(項目配置)。
# 顯示當前的Git配置
$ git config --list# 編輯Git配置文件
$ git config -e [--global]# 設置提交代碼時的用戶信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
?三、增加/刪除文件(最為常用的小組開發命令)
# 添加指定文件到暫存區
$ git add [file1] [file2] ...# 添加指定目錄到暫存區,包括子目錄
$ git add [dir]# 添加當前目錄的所有文件到暫存區
$ git add .# 添加每個變化前,都會要求確認
# 對于同一個文件的多處變化,可以實現分次提交
$ git add -p# 刪除工作區文件,并且將這次刪除放入暫存區
$ git rm [file1] [file2] ...# 停止追蹤指定文件,但該文件會保留在工作區
$ git rm --cached [file]# 改名文件,并且將這個改名放入暫存區
$ git mv [file-original] [file-renamed]
?四、代碼提交
# 提交暫存區到倉庫區 $ git commit -m [message]# 提交暫存區的指定文件到倉庫區 $ git commit [file1] [file2] ... -m [message]# 提交工作區自上次commit之后的變化,直接到倉庫區 $ git commit -a# 提交時顯示所有diff信息 $ git commit -v# 使用一次新的commit,替代上一次提交 # 如果代碼沒有任何新變化,則用來改寫上一次commit的提交信息 $ git commit --amend -m [message]# 重做上一次commit,并包括指定文件的新變化 $ git commit --amend [file1] [file2] ...
五、分支
# 列出所有本地分支 $ git branch# 列出所有遠程分支 $ git branch -r# 列出所有本地分支和遠程分支 $ git branch -a# 新建一個分支,但依然停留在當前分支 $ git branch [branch-name]# 新建一個分支,并切換到該分支 $ git checkout -b [branch]# 新建一個分支,指向指定commit $ git branch [branch] [commit]# 新建一個分支,與指定的遠程分支建立追蹤關系 $ git branch --track [branch] [remote-branch]# 切換到指定分支,并更新工作區 $ git checkout [branch-name]# 切換到上一個分支 $ git checkout -# 建立追蹤關系,在現有分支與指定的遠程分支之間 $ git branch --set-upstream [branch] [remote-branch]# 合并指定分支到當前分支 $ git merge [branch]# 選擇一個commit,合并進當前分支 $ git cherry-pick [commit]# 刪除分支 $ git branch -d [branch-name]# 刪除遠程分支 $ git push origin --delete [branch-name] $ git branch -dr [remote/branch]
六、標簽?
# 列出所有tag $ git tag# 新建一個tag在當前commit $ git tag [tag]# 新建一個tag在指定commit $ git tag [tag] [commit]# 刪除本地tag $ git tag -d [tag]# 刪除遠程tag $ git push origin :refs/tags/[tagName]# 查看tag信息 $ git show [tag]# 提交指定tag $ git push [remote] [tag]# 提交所有tag $ git push [remote] --tags# 新建一個分支,指向某個tag $ git checkout -b [branch] [tag]
七、查看信息?
# 顯示有變更的文件 $ git status# 顯示當前分支的版本歷史 $ git log# 顯示commit歷史,以及每次commit發生變更的文件 $ git log --stat# 搜索提交歷史,根據關鍵詞 $ git log -S [keyword]# 顯示某個commit之后的所有變動,每個commit占據一行 $ git log [tag] HEAD --pretty=format:%s# 顯示某個commit之后的所有變動,其"提交說明"必須符合搜索條件 $ git log [tag] HEAD --grep feature# 顯示某個文件的版本歷史,包括文件改名 $ git log --follow [file] $ git whatchanged [file]# 顯示指定文件相關的每一次diff $ git log -p [file]# 顯示過去5次提交 $ git log -5 --pretty --oneline# 顯示所有提交過的用戶,按提交次數排序 $ git shortlog -sn# 顯示指定文件是什么人在什么時間修改過 $ git blame [file]# 顯示暫存區和工作區的差異 $ git diff# 顯示暫存區和上一個commit的差異 $ git diff --cached [file]# 顯示工作區與當前分支最新commit之間的差異 $ git diff HEAD# 顯示兩次提交之間的差異 $ git diff [first-branch]...[second-branch]# 顯示今天你寫了多少行代碼 $ git diff --shortstat "@{0 day ago}"# 顯示某次提交的元數據和內容變化 $ git show [commit]# 顯示某次提交發生變化的文件 $ git show --name-only [commit]# 顯示某次提交時,某個文件的內容 $ git show [commit]:[filename]# 顯示當前分支的最近幾次提交 $ git reflog
?八、遠程同步
# 下載遠程倉庫的所有變動 $ git fetch [remote]# 顯示所有遠程倉庫 $ git remote -v# 顯示某個遠程倉庫的信息 $ git remote show [remote]# 增加一個新的遠程倉庫,并命名 $ git remote add [shortname] [url]# 取回遠程倉庫的變化,并與本地分支合并 $ git pull [remote] [branch]# 上傳本地指定分支到遠程倉庫 $ git push [remote] [branch]# 強行推送當前分支到遠程倉庫,即使有沖突 $ git push [remote] --force# 推送所有分支到遠程倉庫 $ git push [remote] --all
九、撤銷?
# 恢復暫存區的指定文件到工作區
$ git checkout [file]# 恢復某個commit的指定文件到暫存區和工作區
$ git checkout [commit] [file]# 恢復暫存區的所有文件到工作區
$ git checkout .# 重置暫存區的指定文件,與上一次commit保持一致,但工作區不變
$ git reset [file]# 重置暫存區與工作區,與上一次commit保持一致
$ git reset --hard# 重置當前分支的指針為指定commit,同時重置暫存區,但工作區不變
$ git reset [commit]# 重置當前分支的HEAD為指定commit,同時重置暫存區和工作區,與指定commit一致
$ git reset --hard [commit]# 重置當前HEAD為指定commit,但保持暫存區和工作區不變
$ git reset --keep [commit]# 新建一個commit,用來撤銷指定commit
# 后者的所有變化都將被前者抵消,并且應用到當前分支
$ git revert [commit]# 暫時將未提交的變化移除,稍后再移入
$ git stash
$ git stash pop
十、其他?
# 生成一個可供發布的壓縮包
$ git archive
參考git官網?
總結
以上是生活随笔為你收集整理的Git学习记录(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 手机摄影拍摄技巧?
- 下一篇: 三维重建【三】-------------