swimmingwhale
2/27/2019 - 1:47 PM

git常用命令

clone 远程分支

我们git clone一般只会下载git仓库中的主分支

$ git clone git://example.com/myproject
$ cd myproject

如果想要看远程有哪些分支要加-a参数

$ git branch -a
* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/develop
  remotes/origin/feature
  remotes/origin/feature-im
  remotes/origin/master
  remotes/origin/newbranch

把远程分支下载到本地

$ git checkout -t origin/feature

查看某文件的修改历史

git log -p filename

reset和revert

git reset c011eb3是变到这次commit之后 git revert c011eb3是撤销这次发布

查看tree

git log --oneline --decorate --graph --all

退回到某一版本版本

如果只是本地commit了多次还没有push,用git reset git reset c011eb3 如果已经push了,要用revert,因为revert是已一个新commit去退回,不会发生冲突 git revert HEADgit revert HEAD^git revert c011eb3

删除仓库中的文件但不删本地文件

git rm --cached auto-save-list/ -r

恢复单个文件和查看历史版本

尽量避免使用reset,可以用phpstorm等工具查看历史版本 若想恢复可复制历史版本的内容到现有版本

实现项目部署

cd hooks
sudo vi post-receive

添加如下内容

cd /var/www/demo/
unset GIT_DIR
git pull   /home/git/demo.git  master

给文件加权限

sudo chown git:git post-receive
sudo chmod +x post-receive

git clean

-X 删除ignore忽略的文件 -x 删除ignore忽略的文件及未跟踪的文件。 -d 删除未跟踪的文件。 -n 不要实际删除任何东西,只是显示将做什么 -f 删除东西要加上

tag

列出现有tag git tag 添加本地tag git tag -a v1.4 -m 'my version 1.4' 将tag推送到远程 git push origin v1.5 删除本地tag git tag -d v1.5 删除远程tag git push origin --delete tag v1.5

让git的提示显示英文

echo "alias git='LANG=en_GB git'" >> ~/.bashrc 重启终端才有效

修改远程仓库地址

查看远程分支地址

git remote -v

修改远程分支地址

git remote set-url origin [url]

与本地分支建立关系

git branch --set-upstream-to=origin/master  master

git文件权限

到项目下cat .git/config

filemode=true的时候跟踪修改文件权限

若不想跟踪权限,执行

git config core.filemode false

push时将\n\r转换为\n

git config --global core.autocrlf input

git配置

提交到demo通过git@fivecakes.com,是服务器上的git,而不是docker里的git

发布到正式通过php-docker中的git

想要git忽略文件权限一定要正确配置这两个地方的配置文件

user.email=mtide@xxx.com
user.name=mtide
core.ignorecase=false            # 不许忽略文件名大小写
core.autocrlf=input              # 换行模式为 input,即提交时转换为LF,检出时不转换
core.filemode=false              # 不检查文件权限
core.safecrlf=true               # 拒绝提交包含混合换行符的文件
core.editor=vim
core.repositoryformatversion=0   # Internal variable identifying the repository format and layout version
core.bare=false                  # 默认不创建裸仓库
core.logallrefupdates=true       # log 所有 ref 的更新
core.precomposeunicode=true      # Mac专用选项,开启以便文件名兼容其他系统
push.default=simple              # 只推送本地当前分支,且与上游分支名字一致
alias.lg=log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit