git的基本设置
设置名称与邮箱
首先我们对 Git 进行用户名和邮箱进行设置,请参照下面格式,替换为你自己常用的用户名和邮箱来完成设置:
git config --global user.name "Your Name"
git config --global user.email your@example.com
解释: --global 选项代表对 Git 进行全局设置。
接下来设置 Git 推送分支时相关配置:
git config --global push.default simple
全局代理(通常与VPN设置配合)
//关闭全局代理
git config --global --unset https.proxy
git config --global --unset http.proxy
//设置全局代理 (这里以shadowsocks设置为例)
git config --global https.proxy socks5://127.0.0.1:1086
git config --global http.proxy socks5://127.0.0.1:1086
从远程仓库clone(下载)项目
git clone http://172.28.160.251/hament/gtest.git
执行命令后会一般会提示输入账号和密码
然后模拟修改
cd gtest
touch README.md //创建一个文件
git add README.md //把文件纳入版本管理
git commit -m "add README" // 提交修改
git push -u origin master // 推送到 远程服务器的主分支(master)
创建本地仓库
- 先切换到某个目录
git init
- 把文件纳入管理
$ git add -A //保存到暂存区
- 提交
git commit -m "提交描述"
- 查看日志
git log
如果想查看某次commit的信息, 则在命令后加上 commit版本号
- 添加远程仓库并推送
$ git remote add origin git@github.com:your_username/hello_laravel.git //以github为例
$ git push -u origin master
创建分支
git checkout master //切换到基于哪个分支创建
git checkout -b sign-up // 建立名为sign-up的分支
或
git checkout -b sign-up master
删除分支
$ git branch -d 分支名称
合并分支
git checkout master //目标分支
git merge sign-up // 选择被合并的分支
分支合并完通常会有文件冲突,需要手动挨个解决冲突文件,然后重新把冲突文件纳入版本管理并提交
#解决冲突文件后需要重新纳入版本管理
git add a.txt
git add b.txt
git commit -m "冲突解决"
git push
分支对比
git diff branchA branchB
git diff branchA branchB > d:/diff/exportname.diff //输出日志
恢复到最后一次commited
git checkout -f
版本回退
#回退所有内容到上一个版本
git reset HEAD^
#回退a.py这个文件的版本到上一个版本
git reset HEAD^ a.py
#向前回退到第3个版本
git reset –soft HEAD~3
#将本地的状态回退到和远程的一样
git reset –-hard origin/master // Mac 要两个-
#回退到某个版本
git reset 057d
#本地仓库回退到某个版本
git reset –-hard bae168 // Mac 要两个-
把任意一次/多次的commit作用到当前分支上
该功能可以解决跨分支局部文件合并/修改
应用场景: 如果你的应用已经发布了一个版本2.0, 代码分支叫release-2.0, 现在正在开发3.0, 代码的分支叫dev-3.0. 那么有一天产品说, 要把正在开发的某个特性提前上线, 也就是说要把dev-3.0分支上的某些更改移到2.x的版本上
基于release-2.0分支新建分支release-2.1, 并且到新创建的分支上
git checkout -b release-2.1 release-2.0
将dev-3.0分支上的某些commit在release-2.1分支上重演
git cherry-pick dev-3.0分支的某些commit-hash
如:
git cherry-pick
20c2f506d789bb9f041050dc2c1e954fa3fb6910
2633961a16b0dda7b767b9264662223a2874dfa9
5d5929eafd1b03fd4e7b6aa15a6c571fbcb3ceb4
多个commit-hash使用空格分割, commit-hash最好按提交时间先后排列, 即最先提交的commit放在前面.