排版凌亂扶关,即用即補玫锋,一些常用的問題操作都匯總到這里了疗韵。
英文文檔
https://git-scm.com/docs/
https://www.atlassian.com/git/tutorials/
git reflog expire --all --expire=now
git gc --prune=now --aggressive
顯示單一文件修改記錄
git log -p test.html
徹底刪除文件,github根據(jù)不同情況給出不同方法:
使用git filter-branch或者BFG Repo-Cleaner
查看commit修改內(nèi)容
git show #CommitID
git如何刪除本地所有未提交的更改
git 有什么命令可以清除工作區(qū)的文件
git處理沖突
Resolving a merge conflict from the command line
以github官方提供例子:沖突部分在<<<
和>>>
之間
-
<<<
之后榆骚,===
之前,為目前分支內(nèi)容 -
===
之后煌集,>>>
之前妓肢,為待合并分支內(nèi)容
接下來就是處理<<<
和>>>
之間需要保留的內(nèi)容,執(zhí)行git add -A
保存,之后提交即可苫纤。
the number of planets are
<<<<<<< HEAD
nine
=======
eight
>>>>>>> branch-a
git remote add origin https://github.com/*user*/*repo*.git
//提交多個倉庫
git push --all
pull request流程
鏈接這里
單一文件回退到某個版本:
Reset or revert a specific file to a specific revision using Git?
# Assuming the commit you want is abcde
git checkout abcde file/to/restore
強制遠程分支覆蓋本地分支
How to force “git pull” to overwrite local files?
git fetch --all
git reset --hard origin/master
git reset --hard origin/your_branch
git標簽
# git列表
git tag
# 打標簽
git tag v0.1.1
# 補打標簽
git tag v0.1.1 6224937
# 創(chuàng)建輕量標簽-輕量標簽是指向提交對象的引用(暫時沒用到)
git tag v0.1.2-light
# 附注標簽則是倉庫中的一個獨立對象碉钠。建議使用附注標簽
git tag -a v0.1.2 -m "0.1.2版本備注"
# 給指定的commit打標簽(即補打標簽)
git tag -a v0.1.1 9fbc3d0
# 切換標簽
git checkou [tagname]
# 刪除標簽
git tag -d v0.1.2
# 刪除遠程標簽(需要先刪除本地標簽)
git push origin :refs/tags/v0.9
# 標簽發(fā)布
git push origin v0.1.2 // 提交單一標簽
git push origin --tags //提交所有標簽
# 查看標簽內(nèi)容
git show v1.2.5
刪除所有tags
remove all tag
# Delete local tags.
git tag -l | xargs git tag -d
# Fetch remote tags.
git fetch
# Delete remote tags.
git tag -l | xargs -n 1 git push --delete origin
# Delete local tasg.
git tag -l | xargs git tag -d
強行替換某一分支內(nèi)容
git@Osc當中怎么把一個分支的內(nèi)容完全替換成另一個分支的內(nèi)容呢?
怎么說呢……[@Zoker](http://my.oschina.net/silentboy) 的答案確實能解決你的問題卷拘,但是你本地的master分支還是舊的喊废,通常來說應該在本地做好修改再去push到遠端,所以我推薦如下操作
git checkout master
git reset --hard develop //先將本地的master分支重置成develop
git push origin master --force //再推送到遠程倉庫
強行覆蓋遠程分支方法
git push origin master --force
git回滾遠程版本后強制提交
git push -f
安全方法見Git回滾遠程版本
中文阮一峰
Git遠程操作詳解
本地倉庫名與遠程分支名字不同栗弟,如何提交
辦法How can I push a local Git branch to a remote with a different name easily?
如不設(shè)置污筷,每次提交需要按照以下方式
// 本地:遠程
git push origin HEAD:liuyk-2016-7-27
git 2.0 默認git push為simple
Warning: push.default is unset; its implicit value is changing in Git 2.0
Git 2.0 更改 push default 為‘simple’
stream:‘matching’ 參數(shù)是 Git 1.x 的默認行為,其意是如果你執(zhí)行 git push 但沒有指定分支乍赫,它將 push 所有你本地的分支到遠程倉庫中對應匹配的分支瓣蛀。
simple:而 Git 2.x 默認的是 simple陆蟆,意味著執(zhí)行 git push 沒有指定分支時,只有當前分支會被 push 到你使用 git pull 獲取的代碼惋增。
stream:只關(guān)聯(lián)git pull本分支獲取的代碼叠殷,此處是解決辦法
查看所有別名
git config -l
查看所有的alias
:List Git aliases
$ git config --get-regexp alias
取消工作區(qū)修改
git checkout -- .
修改遠程倉庫地址
修改倉庫名后,是否需要更改clone
地址诈皿。
官方給出的是可以不用換溪猿,但是還是強烈建議替換地址
Renaming a repository
In addition to redirecting web traffic, all git clone, git fetch, or git push operations targeting the previous location will continue to function as if made on the new location. However, to reduce confusion, we strongly recommend updating any existing local clones to point to the new repository URL. You can do this by using git remote on the command line:
git remote set-url origin *new_url*
查看分支關(guān)聯(lián)
git branch -vv
本地新建分支與遠程分支關(guān)聯(lián)
git checkout -b release origin/release
fetch
,merge
git fetch //默認獲取所有分支最新
git fetch origin master // 拉取遠程origin master分支最新
git log -p master..origin/master // 比較不同
git merge origin/master// 合并
查看單個文件修改記錄
git log --patch -- [filename] //每次修改的內(nèi)容
// 以上簡寫為
git log -p [filename]
git log -- [filename] //修改歷史
顯示哪些文件被改動
git log --name-status//僅顯示哪些文件被改動
恢復單個文件到某個記錄節(jié)點
git checkout <commit> <file>//會將文件存入緩存區(qū)
git commit -m "~~~~"
git初始化設(shè)置,個人信息
git config --global user.name "your_username"
git config --global user.email "your_email@domain.com"
初始化本地倉庫
git init
加載文件至臨時緩存
git add . //加載所有文件
git add my_file, my_other_file //加載制定文件夾
取消緩存
git reset
撤銷
git checkout -- filename撤銷提交 //撤銷工作區(qū)file文件的修改,或者誤刪也可以找回
git checkout filename //測試也可撤銷文件在工作區(qū)的修改
git reset HEAD readme.txt //撤銷暫存區(qū)readme.txt
git reset //撤銷暫存區(qū)的修改
撤銷工作區(qū)untrack文件
git clean -f [options: filename] //直接撤銷untrack文件
git clean -nf //撤銷前查看提示
git clean -f xx.txt //刪除xx.txt文件
git clean -fd //連同文件夾一塊撤銷刪除
git clean -nfd//撤銷前查看提示
刪除文件(不好用纫塌,刪除)
git rm file
創(chuàng)建切換分支
git checkout -b new_feature // 創(chuàng)建切換分支
git branch new_feature //創(chuàng)建分支
git checkout new_feature //切換分支
git checkout -b local_branch origin/remote_branch //用法舒服
參考鏈接Clone all remote branches with Git?
合并分支,切換到最終的分支诊县,然后執(zhí)行
git merge new_feature //合并原new_feature上的內(nèi)容
刪除分支
git branch -d new_feature
查看不同
$ git diff --name-status master分支..branchName其他分支 //查看分支不同
$ [Git](http://lib.csdn.net/base/28) diff 工作區(qū)與提交任務(提交暫存區(qū),stage)中相比的差異
$ git diff HEAD 工作區(qū)和HEAD(當前工作分支)相比的差異
$ git diff --cached (或--staged)提交暫存區(qū)(提交任務措左,stage)和版本庫中文件的差異
參考鏈接Showing which files have changed between two revisions
Git學習筆記(三) Git暫存區(qū)
回滾
git log //查看提交記錄
git log --pretty=oneline //one line to show log
git checkout 085bbxx //回滾
推送到遠程
git remote add origin https://your_username@bitbucket.org/your_username/name_of_remote_repository.git //第一次
git push origin master
別名
git config --global alias.c 'commit -m'
git config --global alias.c 'commit -m'
git config --global alias.co 'checkout'
git config --global alias.cob 'checkout -b'
git config --global alias.br 'branch'
git config --global alias.m 'merge'
git config --global alias.a 'add .'
git config --global alias.s 'status'
git config --global alias.dbr 'branch -d'
實質(zhì)上依痊,通過--global
配置的,均在主目錄下有一個.gitconfig
配置文件怎披,可以通過修改來更改刪除查看alias
參考鏈接配置別名
其他方法
1) 創(chuàng)建一個文件 ~/.gitconfig
2)在文件中寫入如下
[alias]
st = status
ci = commit
co = checkout
br = branch
unstage = reset HEAD --
last = log -1 HEAD
參考鏈接 git alias 設(shè)置
版本回退(mac操作錯誤)
在Git中胸嘁,用HEAD表示當前版本,上一個版本就是HEAD凉逛,上上一個版本就是HEAD^
回退到上一個版本
git reset --hard HEAD^
穿梭到某個版本
git reset --hard VersionID
查看之前紀錄
git reflog
刪除分支
git branch -d [branch-name]
不同
# 顯示暫存區(qū)和工作區(qū)的差異
$ git diff
# 顯示暫存區(qū)和上一個commit的差異
$ git diff --cached [file]
增加一個新的遠程倉庫(本地操作遠程)
# 增加一個新的遠程倉庫性宏,并命名
$ git remote add [shortname] [url]
遠程倉庫改名
git remote rename <原主機名> <新主機名>
查找.ssh文件
/Users/liwei/.ssh
生成.ssh
$ ssh-keygen -t rsa -C "youremail@example.com"
本地連接遠程空倉庫
$ git remote add origin git@github.com:michaelliao/learngit.git //關(guān)聯(lián)
$ git push -u origin master //我們第一次推送master分支時,加上了-u參數(shù)状飞,Git不但會把本地的master分支內(nèi)容推送的遠程新的master分支毫胜,還會把本地的master分支和遠程的master分支關(guān)聯(lián)起來,在以后的推送或者拉取時就可以簡化命令诬辈。
查看遠程庫的信息
$ git remote
新建遠程分支
#方法:直接提交到新分支
git push origin '新分支名'
#完整的命令應如下:
git push origin '本地分支名':'遠程分支名'
#本地與遠程關(guān)聯(lián)酵使,這樣以后直接輸入git push即可
git push origin '遠程分支名'
參考鏈接How do you create a remote Git branch?
有關(guān)遠程分支關(guān)聯(lián)疑問
git branch --set-upstream my_branch origin/my_branch
鏈接Why do I need to do --set-upstream
all the time?
刪除遠程分支
git push origin :dev //刪除遠程dev分支
常用操作
遠程分支
git checkout -b [分支名] [遠程名]/[分支名]。如果你有 1.6.2 以上版本的 Git焙糟,還可以用 --track
選項簡化:
$ git checkout --track origin/serverfix
Branch serverfix set up to track remote branch serverfix from origin.Switched to a new branch 'serverfix'
要為本地分支設(shè)定不同于遠程分支的名字口渔,只需在第一個版本的命令里換個名字:
$ git checkout -b sf origin/serverfix
Branch sf set up to track remote branch serverfix from origin.Switched to a new branch 'sf'
git協(xié)作流程
Git 協(xié)作流程
github release
release
目前還不清楚的問題:
git rest與git checkout log區(qū)別
git diff更多使用說明
git pull 和git fetch區(qū)別,如何一次獲得所有倉庫的更新并合并