git使用小记
1. 基本操作
全局配置:
?git config --global user.name xx?
?git config --global user.email xxx?
?
初始化一個倉庫:
?git init?
?
添加:
?git add "file1.txt"?
?git commit -m "添加文件1"?
?
比較:分別列出每個文件的當前內容與其最近一次提交的差異
?git diff file1 file2 file3?,工作區和暫存區的比較
?git diff --cached file1 file2 file3?,暫存區和倉庫比較
?
查看某次提交做的修改:
?git show ${commit_id}?
?
創建新倉庫 / 將已有未被管理的項目加入到某個倉庫 / 將已有已被管理的項目加入到另一個倉庫:
?
?
2. 分支管理
創建分支:?git branch 新分支名 [源分支名]?
刪除分支:?git branch -d 分支名?
切換分支:?git checkout 分支名?,或? ?git checkout -b 新分支名 [源分支名]?,后者為從指定源分支(默認為master)創建并切換分支
查看分支(假設遠程和本地庫中都只有master分支,遠程主機名在本地被取為origin):
- 查看本地:?git branch?,得到master
- 查看遠程分支:?git branch -r?,得到origin/master
- 查看本地和遠程的所有分支:?git branch -a?,得到master和remotes/origin/master兩條記錄
取回遠程主機分支:?git fetch 遠程主機名 [分支名]?,如git fetch origin master。若沒有指定分支名則取回所有分支的更新;取回分支只是將遠程主機版本庫的更新取回,對本地分支沒影響;所取回的更新,在本地主機上要用"遠程主機名/分支名"的形式讀取
合并分支:?git merge [--no-ff] 被合并分支名?,將指定分支合并到當前分支。不含--no-ff參數時,Git執行快進式合并,直接將當前分支指向被合并分支;帶該參數時會執行正常合并,在Master分支上生成一個新節點。
關于創建與合并分支的原理,可見創建與合并分支-廖雪峰、Git分支管理策略-阮一峰
?
3. 查看狀態
命令:?git status?
查看commit記錄:?git log [--pretty=oneline] ?,這里加后面參數可以減少不相關信息的輸出,從而輸出每次修改的commit_id和注釋。如?8ebc1882fa63e8048a8ad983e9de7fa413f54580 add file test.txt?
查看commit和reset等記錄:?git reflog?,其可查看所有分支的所有操作記錄(包括commit和reset的操作及已經被刪除的commit記錄,git log則不能察看已經刪除了的commit記錄),其會列出每種操作完后的commit_id串的前幾位。
查看提交圖:?git log --graph --pretty=oneline --abbrev-commit?,結果示例:
?
4. 版本回退
(參考自Git版本回退操作)
?git reset --hard commit_id?
- 這里版本號可以不全寫會根據已寫的自動查找;
- 除了用commit_id外,也可用特殊標記:Git用?HEAD?表示當前分支的最新版本、?HEAD^?表示上版本、?HEAD^^?表示上上版本、?HEAD~100?表示往上100個版本以此類推;
- 回退后,HEAD的指向也變成當前的最新版,可能造成往歷史版本回滾后滾不回真正的最新版,如對于版本號為1到10的十個版本,回滾到版本5后HEAD就是版本5了此時滾不回10。解決:可以通過git reflog查看版本10提交時的commit_id從而滾到最新版。
?
?
5. 遠程管理
(參考自Git遠程操作詳解-阮一峰)
Git和其他版本控制系統如SVN的一個不同之處就是有暫存區(即stage或index)的概念。
git clone
git fetch
git pull
git push
git remote
git clone?
?git clone <版本庫的網址> [<本地目錄名>]?,從遠程主機克隆一個版本庫。
- 該命令會在本地主機生成一個目錄,不指定名稱的話與遠程主機的版本庫同名;
- Git要求每個遠程主機都必須指定一個主機名,默認為origin,可以通過-o參數指定,如?git clone -o jQuery https://github.com/jquery/jquery.git?,此外可以通過 -b 指定克隆版本庫的指定分支。
- git clone還支持HTTP(s)、FTP、SSH、file等協議,如?git clone file:///opt/git/project.git?
git fetch
?git fetch?用法見上面的分支管理部分。
git pull
?git pull <遠程主機名> <遠程分支名>[:<本地分支名>]?:從指定遠程主機的某個分支拉取更新并合并到指定的本地分支,如?git pull origin next:master?將origin/next分支更新拉取并合并到本地master分支。
- 若未指定本地分支時默認為當前分支,如?git pull origin next?取回origin/next分支并與當前分支合并,相當于 git fetch origin/next、git merge origin/next兩步操作。
- 若當前分支與遠程分支存在追蹤關系,git pull就可以省略遠程分支名,如git pull origin。
- 在git clone時所有本地分支默認與遠程主機的同名分支,建立追蹤關系,也即本地的master分支自動"追蹤"origin/master分支。
- Git也允許手動建立追蹤關系,如git branch --set-upstream master origin/next指定master分支追蹤origin/next分支。
- 若當前分支只有一個追蹤分支,連遠程主機名都可以省略,如?git pull??
git push
?git push <遠程主機名> <本地分支名>:<遠程分支名>?:將本地分支的更新,推送到遠程主機,如?git push origin master:next?將本地master分支推送到遠程origin主機的next分支上。
- 省略遠程分支名表示將本地分支推送到與之存在"追蹤關系"的遠程分支(通常兩者同名),如果該遠程分支不存在,則會被新建。如?git push origin master?將本地的master分支推送到origin主機的master分支。
- 省略本地分支名表示刪除指定的遠程分支,因為這等同于推送一個空的本地分支到遠程分支。如?git push origin :master?等同于?git push origin --delete master?,表示刪除origin主機的master分支。
- 若當前分支與遠程分支之間存在追蹤關系,則本地分支和遠程分支都可以省略。如?git push origin?將當前分支推送到origin主機的對應分支。
- 若當前分支只有一個追蹤分支,那么主機名都可以省略。如?git push?
- 若當前分支與多個主機存在追蹤關系,則可使用-u選項指定一個默認主機,如?git push -u origin master?將本地的master分支推送到origin主機的master分支,同時指定origin為默認主機并將兩分支關聯起來,在以后的推送或者拉取時就可以不加任何參數使用git push了。?
git remote
??git remote ?:管理遠程主機名
- 不帶參數時,列出所有遠程主機
- -v參數,列出所有遠程主機及網址
- ?git remote show <主機名> ?,查看某遠程主機信息
- ?git remote add <主機名> <網址> ?,添加遠程主機
- ?git remote rm <主機名> ?,刪除遠程主機
- ?git remote rename <主機名> ?,重命名遠程主機
??
GtiHub不適合作為個人不愿公開的項目的托管,可以使用Gitlab。
為Gitlab賬號添加SSH key并使用Git連接Gitlab(為GitLab帳號添加SSH keys并連接GitLab):有兩種方式從Gitlab上clone項目,http和ssh。
- 前者每次clone、push等操作都需要用戶輸入賬號的用戶名和密碼,比較麻煩;
- 可以使用后者并配置SSH Key來避免這種麻煩。其實本質上使用SSH也需要輸入賬號和相應密碼,但我們通過生成并添加SSH Key使得在clone等操作時計算機幫我們做了身份驗證的事。(且由于生成了公鑰和私鑰并把公鑰放到了Gitlab上,它們相當于一對鎖和鑰匙,在連接時進行公鑰和私鑰的匹配,所以用SSH方式不需要知道賬號的密碼了,在生成SSH Key時提示設置的密碼也不是賬號的密碼,而是push操作時的密碼,可以不設置,這樣以后clone等操作都不需要輸入密碼了)
6. 其他
修改已經commit的comment
修改最近一次提交:
?git commit --amend ?可以修改最近一次提交的注釋信息。詳情參閱:https://stackoverflow.com/questions/179123/how-to-modify-existing-unpushed-commits
修改指定某次的歷史提交:
https://xiewenbo.iteye.com/blog/1285693
?
轉載于:https://www.cnblogs.com/z-sm/p/4203845.html
總結
- 上一篇: c语言语法c11,_Atomic类型说明
- 下一篇: 1、使用xcode9创建swift语言的