先來個分區介紹
設置 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