git 實戰

先來個分區介紹

設置 git config--global 
設置貢獻者 git config --global  user.name 和 git config --global user.email
查看所有配置項 git config --list
設置公鑰 ssh-keygen -t rsa -C “您的郵箱地址” 在c相對應的路勁找到用記事本打開,粘貼到github上才能git clone

1、放棄本地的所有修改,強制更新爲版本上的代碼

git fetch --all  
git reset --hard origin/master 
git pull

2、各種撤銷操作

2-1、撤銷本地修改、未add (會恢復到修改之前)

git checkout -- <filename> #撤銷單個文件
git checkout .   #撤銷本地所有修改   √
git reset --hard <filename> #撤銷指定文件本地代碼到上個提交的版本
git reset --hard #撤銷本地代碼到上個提交的版本  √
附:reset會回退、checkout是放棄修改

2-2、撤銷git add操作 

①先執行git reset  ②再執行git checkout -- <filename> #撤銷單個文件 (會恢復到本地文件修改之前)
①先執行git reset  ②再git checkout .   #撤銷本地所有修改(會恢復到本地文件修改之前)
git reset --hard <file> #撤銷本地代碼到上個提交的版本(會恢復到本地文件修改之前)
git reset --hard #撤銷本地代碼到上個提交的版本(會恢復到本地文件修改之前)

2-3、撤銷git commit操作

git reset --hard origin/masterName (會恢復到修改以前)
git reset --hard HEAD~1 (會恢復到修改以前)
git commit --amend <files>   覆蓋上一次的提交

2-4、撤銷git push操作

git reset --hard HEAD  (git reset --hard <tag/branch/commit id>)

  • git reset --hard HEAD^  或
  • git reset --hard "HEAD^"  或
  • git reset --hard HEAD^^   或
  • git reset --hard HEAD~ 或 
  • git reset --hard HEAD~1

(^可能git會出現需要填寫more信息,因爲工具識別^爲空格)另外:git reset 後,可能因爲權限的問題無法強行git push --force。但是難道如果程序員誤操作提交了一次錯誤的東西到master就沒法回滾了(指不需要gitlab管理員來回滾)

git revert <commit_id>    會生成一個新的commit

附:

git reset 參數 (<commit_id>從git log中取,取前7位即可,git reflog - 10 查看更簡潔)
git reset --soft <commit_id>  #程度最輕,僅僅是把版本庫的重置,暫存區和工作區沒做任何修改。  【返回到某個節點。保留修改】
git reset --mixed <commit-id>  (默認情況)程度中,也是默認操作,它把版本區和暫存區都重置了,但是工作區沒有重置。
git reset --hard <commit_id>   程度最強,三個區全部重置了 【返回到某個節點,不保留修改】

git revert 與 git reset 的區別
git reset是指HEAD指針,重新指向某個commit-id的位置。並且它後續的commit-id會被刪除。git revert會產生一條新的commit,原有的commit-log並不會發生任何變化。
 

總結:四個階段都可以使用git reset 

更多撤銷參考有關文檔:

checkout
commit
rebase
reflog
reset
revert
rm

3、設置大小寫敏感

git config core.ignorecase false

4、分支操作

創建分支 git branch branchname 
查看所有分支 git branch -a  
查看遠程分支 git branch -r  
查看本地分支 git branch
切換分支     git checkout branchname 
重命名分支   git branch -m | -M oldbranch newbranch  
刪除branchname分支           git branch -d | -D branchname 
刪除遠程branchname分支    git branch -d -r branchname  或者 git push origin :branchname  
推送分支  git push origin branchname 
查看當前分支遠程地址  git remote -v

關聯分支 git remote add origin url..   關聯後可能還是不能推送和拉取需要手動建立追蹤關係 (git branch --set-upstream branchaName origin/branchName),如果還是不能提交提示“error merging: refusing to merge unrelated histories” 嘗試(寫git pull origin master --allow-unrelated-histories需要知道,我們的源可以是本地的路徑)

遠程倉庫地址變了,本地倉庫地址也相應的修改 git remote set-url origin <新的git url>

基於分支創建子分支 git checkout <remote>/<branch> -b <branch>

5、git stash

查看
git stash list  

新建
在原分支 git stash save -a "messeag",(-a 會把忽略的文件都添加進去)  git stash -u

恢復
git stash pop 恢復最近的 
git stash pop stash@{id} 或者 git stash apply stash@{id}即可
原來git stash pop stash@{id}命令會在執行後將對應的stash id 從stash list裏刪除,
而 git stash apply stash@{id} 命令則會繼續保存stash id。

刪除
git stash drop <stash@{id}>
git  stash clear 是清除所有stash

6、換行符的修改

git config --global core.autocrlf false  參考:http://blog.csdn.net/ccfxue/article/details/52625806

7、用a分支的test.js文件或者文件夾 覆蓋 b分支的test.js或文件夾

首先切換到b分支上 ,然後git checkout  branchB  xxx/xxx/test.js              更多參考:https://git-scm.com/docs/git-checkout

運行 git checkout -m [path],可以知道哪邊代表 ours ,哪邊代表 theirs
然後使用命令 git checkout --theris 1.txt 選擇 test 分支 

Git合併特定commits 到另一個分支 http://blog.csdn.net/ybdesire/article/details/42145597
提取/合併某分支的部分文件     http://www.cnblogs.com/xulingfeng/p/5864041.html

8、忽略提交文件

已經到版本庫的文件 

在.gitignore 添加需要忽略的文件或者文件夾
git rm -r --cached ‘文件夾或者文件路勁’ #刪除追蹤狀態
git add .
git commit -m "fixed untracked files"

僅在自己本地忽略
git update-index --assume-unchanged xxx/xx.txt

恢復提交已忽略的文件git update-index --no-assume-unchanged xxx/xx.txt

9、git merge高級合併

①(master)git merge --squash dev ##合併壓縮,將dev分支上的commit壓縮爲一條 (這樣不會把dev上所有修改的commit都提交上去)
②(master)git merge --ff dev #  ff 就是 fast forward的意思 將不會創造一個新的commit節點。【默認】情況下,git-merge採用fast-forward模式。
③(master)git merge --no-ff dev #  即使可以使用fast-forward模式,【也要創建一個新的合併commit節點】【並強制保留develop分支的開發記錄】(而fast-forward的話則是直接合並,看不出之前Branch的任何記錄)。這對於以後代碼進行分析特別有用
所以 --no-ff  和 --squash 是對立的不能同時執行

參考:

https://git-scm.com/docs
https://git-scm.com/book/zh/v2
https://www.jianshu.com/p/58a166f24c81

 

發佈了210 篇原創文章 · 獲贊 288 · 訪問量 286萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章