獲得版本庫
git init
-
git clone
?
查看信息
git help
-
Git log
? 查看提交日志
-
git diff
? 比較文件在不同狀態(tài)中的文件區(qū)別
版本管理
-
Git add
? 加入到版本暫存區(qū)中
? . 表示當前文件夾都納入到暫存區(qū)
-
git commit
? 將暫存區(qū)的文件提交到git版本庫中
-
git rm
? git rm 版本庫中的文件
遠程協作
-
git pull
? 將遠程版本庫中的文件拉取到本地
-
git push
? 將本地版本庫中的文件推送到遠程庫
Git配置
git 查看版本
- git —version
首次使用前的配置
對于user.name與user.email來說订雾,有3個地方可以設置
1块促,/etc/gitconfig (幾乎不用) 對于操作系統的 git config —system
2,~/.gitconfig (很常用) 對于所有的git項目 git config —global
-
3地沮,針對于特定的項目的 .git/config文件中 對于特定的項目 git config —local
git config --local user.name 'lihao' git config --local user.email 'test@qq.com' git config user.name git config user.email //重置 git config --local user.name 'lisan' //刪除 git config --local --unset user.name
?
git的提交更新
提交更新风响,每次準備提交前嘉汰,先用 git status 看下,是不是都已暫存起來了状勤,然后在運行提交命令鞋怀。
- Git commit
- git commit -m 'init'
- Git commit —amend -m 'init' 修改最后一次提交的message
- git commit -am 'init' 添加到索引庫并提交 不用寫add了
git 刪除文件
- 刪除文件
- Git rm readme
以上兩者區(qū)別
Git rm :
- 刪除了一個文件
- 將被刪除的文件納入到暫存區(qū)(stage,index)
- git rm --cached -r .idea 從暫存區(qū)刪除
如果恢復文件
git reset HEAD index.php 由暫存區(qū)恢復到工作區(qū)
git checkout — index.php 丟棄工作區(qū)刪除文件的內容
rm:
? 將文件刪除了,這時持搜,被刪除的文件并未納入緩存區(qū)當中.
如果恢復文件:
git checkout — index.php
git 重命名
git mv from_file to_file
Git 查看提交歷史
- git log
- -p 展開顯示每次提交的內容差異
- -n 僅顯示最近的n次更新
- —stat 僅顯示簡要的增改行數統計
- —pretty=oneline
- —pretty=format:'%h - %an,%ar:%s'
- —graph 圖形化的方式查看log
忽略文件 .gitignore
- 新建 .gitignore 文件
- *.a 忽略所有 .a結尾的文件
- !lib.a 但 lib.a除外
- /todo 僅僅忽略項目根目錄下的todo文件不包括subdir/todo
- Build/ 忽略build/目錄下的所有文件
- doc/*.txt 會忽略doc/notes.txt 但不包括 doc/server/arch.txt
- ** 表示所有的目錄
如果.gitignore嘗試以下方法
.gitignore只能忽略哪些原來沒有被track的文件密似,如果某些文件已經被納入了版本管理中,
則修改.gitignore是無效的葫盼,那么解決方法就是先把本地緩存刪除(改變成未track狀態(tài)),然后再提交:
git rm -r --cached .
git add .
git commit -m 'update .gitignore'
分支
列出當前所有分支
- git branch
創(chuàng)建分支
- git branch branch_name
切換分支
- git checkout branch_name
刪除分支
- git branch -d branch_name
創(chuàng)建并轉向所創(chuàng)建的分支
- git checkout -b branch_name
修改分支的名稱
- git branch -m branch_name new_branch_name
fast-forward
- 如果可能残腌,合并分支時git 會使用fast-forward 模式
- 在這種模式下,刪除分支時會丟掉分支信息。
- 合并時加上 —no-ff 參數會禁用fast-forword, 這樣會多出一條commit id
- git merge —no-ff dev
合并分支
- Git merge branch_name
git 回退版本
-
回退到上一個版本
git reset -- hard HEAD^ //回退到上一個版本 git reset -- hard HEAD^^ //回退到上兩個版本 git reset -- hard HEAD~2 //回退到指定第幾個版本 git reset -- hard commit_id //回退到指定的版本
?
-
查看操作日志
git reflog
checkout
-
Git checkout — test.txt
作用是:丟棄掉相對于暫存區(qū)中最后一次添加的文件內容所做的變更
-
Git reset HEAD test.txt
作用是:將之前添加到暫存區(qū)(stage,index)的內容從暫存區(qū)移除到工作區(qū)抛猫。
保存工作現場
保存現場
- git stash
- git stash sava 'init'
- git stash list
- git stash —help
恢復現場
- Git stash apply (stash 內容并不刪除蟆盹,需要通過git stash drop stash@{0} 手動刪除)
- git stash pop (恢復的同時也將stash 內容刪除)
- Git stash apply stash@{0}
git 標簽
新建標簽,標簽有兩種:輕量級標簽(lightweight)與帶有附注標簽(annotated)
-
創(chuàng)建一個輕量級標簽
git tag v1.0.1
-
創(chuàng)建一個帶有附注的標簽
git tag -a v1.0.2 -m 'release verion'
?
-
刪除標簽
git tag -d tag_name
-
搜索標簽
git tag -l 'v*'
-
查看標簽
git show v1.0.0
?
-
將標簽推送到遠程
git push origin v1.0.0 //推送指定的標簽 git push origin --tags // 推送所有的標簽
-
刪除遠程標簽
git push origin --delete tag v1.0.1
?
?
?
查看一個文件都是誰提交的
git blame index.php
git diff 比較
- git diff : 比較的是暫存區(qū)與工作區(qū)文件之間的差別闺金,暫存區(qū)表示是原始文件逾滥。
- git diff HEAD: 比較的是最新的提交與工作區(qū)之間的差別。
- git diff —cached: 比較的是版本庫與暫存區(qū)之間的差別败匹。
遠程
查看遠程倉庫
Git remote show 顯示遠程倉庫的別名寨昙。
-
Git remote show origin 遠程倉庫詳細信息
git remote show origin * remote origin Fetch URL: https://github.com/haojuwang/git.git Push URL: https://github.com/haojuwang/git.git HEAD branch: master Remote branch: master tracked Local branch configured for 'git pull': master merges with remote master Local ref configured for 'git push': master pushes to master (up to date)
?
添加到遠程倉庫
- Git remote add origin 遠程地址
- git push -u origin master
查看遠程倉庫
git branch -a 查看遠程分支
git branch -av 查看遠程分支并顯示最后一次提交的信息
-
git remote show origin 查看遠程分支與本地的對比
?
clone
- git clone git@github.com:haojuwang/git.git git2 下載到指定的git2 文件夾
創(chuàng)建遠程分支
git push —set-upstream origin 遠程名稱
-
git push —set-upstream origin src:dest (src 本地 dest 遠程)
?
刪除遠程分支
git push origin :dev(遠程分支名稱)
-
git push origin --delete dev
?
修改遠程分支名稱
git remote rename origin origin2
遠程分支刪除了本地同步刪除
git remote prune origin
推送到遠程
- Push 完整命令: git push origin srcBranch:destBranch (srcBranch 本地 destBranch遠程)
- pull操作的完整命令是: git pull origin srcBranch:destBranch (srcBranch 遠程 destBranch本地)
- HEAD 標記: HEAD 文件是一個指向你當前所在分支的引用標識符,該文件內部并不包含SHA-1值,而是一個指向另外一個引用的指針掀亩。
- 當執(zhí)行git commit 命令時舔哪,Git會創(chuàng)建一個commit對象,并且將這個commit對象的parent指針設置為head所指向的引用的SHA-1值槽棍。
- 我們對于HEAD修改的任何操作尸红,都會被git reflog 完整記錄下來
- 實際上,我們可以通過git底層命令symbolic-ref來實現對HEAD文件內容的修改
基于遠程分支創(chuàng)建分支
- git checkout -b develop origin/develop
- git checkout --track origin/test
git別名
git config --global alias.br branch br 表示 branch 的簡寫
-
~/.gitconfig 別名文件
cat ~/.gitconfig [alias] br = branch co = commit
?
查看遠程分支提交log
git log origin/master
git log remotes/origin/master
git log refs/remotes/origin/master
git裸庫
- Git裸庫是指沒有工作區(qū)的git 項目刹泄,常用于服務器端
- 創(chuàng)建一個裸庫 gi init —bare
git submodule
git submodule add git@10.211.55.3:java/git_child.git submodule
子倉庫的地址:git@10.211.55.3:java/git_child.git
submodule 子倉庫放置的目錄
更新submodule
- 直接進入submodule 的目錄 執(zhí)行git pull
- 更新所有的submodule git submodule foreach git pull
submodule git clone 發(fā)生了變化
git clone git@10.211.55.3:java/git_parent.git git_parent2
git submodule init
git submodule update --recursive
--------------
git clone git@10.211.55.3:java/git_parent.git git_parent2 --recursive
刪除submodule
git rm --cached mymodule
rm rf mymodule
git add .
git commit -am 'update'
rm .gitmodules
git push
git subtree
添加 subtree
git remote add subtree-origin git@10.211.55.3:java/git_subtree_child.git
git subtree add --prefix=subtree subtree-origin master --squash
git push
subtree: 表示目錄
subtree-origin: 遠程版本庫
master: 表示遠程版本庫的分支
parent subtree pull
git subtree pull --prefix=subtree subtree-origin master --squash
parent Subtee push
git push
git subtree push --prefix=subtree subtree-origin master
git cherry-pick
將一個分支的修改應用到另外一個分支上
現在是在dev 分支上修改,我想把修改放在master上
master: git cherry-pick c7d3592
c7d3592 commit sha-1 這個id 是dev上面的
原來的分支修改刪除
dev: git checkout c7d3592 //切換到 c7d3592分支
c7d3592 : git branch -D dev 刪除分支
c7d3592 : git branch -b dev 創(chuàng)建分支
Git rebase
- Rebase : 變基怎爵,意即改變分支的根基
- 從某種程度上來說特石,rebase與merge可以完成類似的工作,不過二者的工作方式有著明顯的差異
生成公鑰私鑰
-
ssh-keygen
ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/Users/lixueqin/.ssh/id_rsa):
?
id_rsa 私鑰 不能給別人
id_rsa.pub 公鑰
gretty
http://akhikhl.github.io/gretty-doc/Gretty-configuration.html
repositories {
maven {
name 'aliyun'
url 'http://maven.aliyun.com/nexus/content/groups/public/'
}
mavenCentral()
}
//gretty
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'org.akhikhl.gretty:gretty:2.0.0'
}
}
if (!project.plugins.findPlugin(org.akhikhl.gretty.GrettyPlugin))
project.apply(plugin: org.akhikhl.gretty.GrettyPlugin)
gretty{
httpEnabled = true
servletContainer = 'tomcat8'
contextPath = '/mygit'
httpPort = 8081
host = "localhost"
scanInterval = 1
fastReload =true
inplaceMode = 'soft'
loggingLevel = "DEBUG"
consoleLogEnabled = true
debugPort = 6005
debugSuspend = true
}
運行
gradle appRun
debug
gradle appRunDebug
遠程debug
https://dancon.gitbooks.io/intellij-idea/content/remote-debugging.html
gitlab安裝
-
配置 vim /etc/gitlab/gitlab.rb
external_url 'http://Vultr' external_url 'http://108.61.126.40/
-
載入配置服務(初始化和修改/etc/gitlab/gitlab.rb 后需要重新載入)
gitlab-ctl reconfigure
-
啟動服務
gitlab-ctl start
-
停止服務
gitlab-ctl stop
-
重啟服務
gitlab-ctl restart
查看日志
gitlab日志:/var/log/gitlab
查看gitlab日志:gitlab-ctl tail
查看gitlab對應的Nginx訪問日志:gitlab-ctl tail nginx/gitlab_access.log
查看gitlab對應的數據庫postgre-sql的日志:gitlab-ctl tail postgresql
gitlab數據存放目錄:/var/opt/gitlab/git-data
-
下載失敗
https://packages.gitlab.com/gitlab/gitlab-ce rpm -i gitlab-ce-9.4.6-ce.0.el7.x86_64.rpm
?
不讓用戶注冊
http://10.211.55.3/admin/application_settings
git 倉庫
git init --bare 倉庫名稱.git
///data/git/cangku.git/