git常用命令 for mac
Tips:不要创建与分支同名的tag和同目录文件夹。
创建
- 选择一个合适的地方,创建一个空目录
$ mkdir gitforwork
$ cd gitforwork
$ pwd
/Users/lixingdong/gitforwork
- 通过git init命令把这个目录变成Git可以管理的仓库
$ git init
Initialized empty Git repository in /Users/lixingdong/gitforwork/.git/
- 查看目录下内容
$ ls -ah
. .. .git
克隆
- 在gitbub中创建并认证
$ ls -al ~/.ssh
$ pbcopy < ~/.ssh/id_rsa.pub
粘贴到SSH key中
- 使用git clone拷贝一个Git仓库到本地
$ git clone git@github.com:SilenceLee17/first.git
查看仓库
- 使用git status查看仓库当前的状态
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
设置.gitignore
- 设置全局.gitignore
$ git config --global core.excludesfile ~/.gitignore_global
- 设置xcode项目需要的忽略项:
$ vi ~/.gitignore_global
## Build generated
build/
DerivedData
## Various settings
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
## Other
*.xccheckout
*.moved-aside
*.xcuserstate
project.xcworkspace
.DS_Store
.swp
# 忽略Xcode本地用户配置信息
*.xcuserstate
*.xcuserdatad/
xcuserdata/
xcshareddata/
.metadata/
# 忽略`Pods/`和`Podfile.lock`
Pods/
Podfile.lock
添加
- 使用git add添加需要提交的文件
$ git add README.md
- git add . 或者 git add —all
提交所有文件。
- 中文文件名乱码
$ git config --global core.quotepath false
git 默认中文文件名是 xx%,core.quotepath设为false的话,就不会对0x80以上的字符进行quote。中文显示正常。
- 文件名称带空格
在文件名上加个单引号就可以了,如 cd ‘program files’
提交
- 使用git commit提交
$ echo "# first" >> README.md
$ git add README.md
$ git commit -m "first commit"
git commit -m “Adding files”
如果您不使用-m,会出现编辑器来让你写自己的注释信息。
- 使用git commit -a提交
当我们修改了很多文件,而不想每一个都add,想commit自动来提交本地修改,我们可以使用-a标识。
git commit -a -m “Changed some files”
git commit 命令的-a选项可将所有被修改或者已删除的且已经被git管理的文档提交倒仓库中。
千万注意,-a不会造成新文件被提交,只能修改。
更新
- 设置默认路径并使用git pull更新
$ git remote remove origin
$ git remote add origin git@github.com:SilenceLee17/first.git
$ git pull
- 从非默认位置更新到指定的url
$ git pull git@github.com:SilenceLee17/first.git
推送
- 配置用户信息
$ git config --global user.name 'lixingdong'
$ git config --global user.email '[email protected]'
- 使用git push推送
$ git push
使用方法与git pull类似。表示当前分支自动与唯一一个追踪分支进行合并。
- 创建分支,push到服务器
$ git push origin develop
分支与合并
- 创建并更改分支
$ git checkout -b dev
- 更改提交到主分支,则需切换回master分支,然后使用合并
$ git checkout master
$ git merge --no-ff dev
- 删除分支,我们使用-d标识
$ git branch -d dev
如果没有合并,删除分支
$ git branch -D dev
git branch -d -r branchname 删除远程branchname分支
- 查看各个分支最后一次提交
$ git branch -v
git branch -a 列出本地分支和远程分支
git branch -r 列出远程分支
- 重命名分支
git branch -m | -M oldbranch newbranch 重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命名,否则,使用-m进行重命名。
- 关联本地与远端分支
$ git branch --set-upstream-to=origin/<branch> dev
备份
场景:当前工作区内容已被修改,但是并未完成。如需要还原代码解决更高优先级问题,然后继续完成修改。
- 备份当前的工作区的内容
$ git stash
从最近的一次提交中读取相关内容,让工作区保证和上次提交的内容一致。同时,将当前的工作区内容保存到Git栈中。
- 恢复工作区的相关内容
$ git stash pop
从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
- 显示Git栈内的所有备份
$ git stash list
- 清空Git栈
$ git stash clear
- 恢复工作区指定内容
$ git stash apply stash@{0}
查看历史
- 列出文件的所有改动历史
$ git log --pretty=oneline 文件名
- 某次提交的具体修改
$ git show ade53529419ddad8e0bab105faebd006c04af333
数字为每次提交形成的哈希值
$ git log -p -1
-p 选项展开显示每次提交的内容差异,用 -1 则仅显示最近的一次更新
属性配置
- Git会按照你需要自动为大部分的输出加上颜色
$ git config --global color.ui true
–global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。
- 简写git命令
st就表示status,co表示checkout,ci表示commit,br表示branch,unstage表示reset HEAD。
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci "commit -a"
$ git config --global alias.st status
$ git config --global alias.pl "pull -r"
$ git config --global alias.unstage 'reset HEAD'
- 用git last就能显示最近一次的提交
$ git config --global alias.last 'log -1'
- git lg配置日志打印
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit"
- 设置文本编辑器和差异分析工具
$ git config --global core.editor /usr/bin/vim
$ git config --global merge.tool vimdiff
子模块
- 下载的工程带有子模块
$ git submodule update --init --recursive
- 添加子模块
$ git submodule add 仓库地址 路径
工程根路径下生成一个名为“.gitmodules”的文件,其中记录了子模块的信息
- 更新子模块
$ git submodule update
- 删除子模块
ubmodule的删除稍微麻烦点:首先,要在“.gitmodules”文件中删除相应配置信息。然后,执行“git rm –cached ”命令将子模块所在的文件从git中删除。
恢复
- reset命令3种方式
$ git reset --mixed
此为默认方式,不带任何参数的git reset相同。回退到某个版本时,保留源码,回退commit和index信息。
$ git reset --soft
回退到某个版本时,回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可。
$ git reset --hard
彻底回退到某个版本。
优选
cherry-pick就是从不同的分支中捡出一个单独的commit,并把它和你当前的分支合并。
$ git cherry-pick [commit_hash]
还原
还原已经提交的修改
此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交。
git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,版本会递增,不影响之前提交的内容。
git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit
git revert commit-id
自动补全
- 安装bash-completion
1.用homebrew安装bash-completion软件包:brew install bash-completion
2.把下面内容添加到你的~/.bash_profile:
if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi
- git自动补全
$ cd /usr/local/opt/bash-completion/etc/bash_completion.d
$ curl -L -O https://raw.github.com/git/git/master/contrib/completion/git-completion.bash
$ brew unlink bash-completion
$ brew link bash-completion