新晋程序员小呆呆找到了一份开发工作,在开发过程中,小呆呆将慢慢熟悉Git的一些基本使用。
创建项目
- 组长:小呆呆,今天起我们要开始新项目的开发了。
- 小呆呆:好哒 (๑•̀ㅂ•́)و✧
于是,小呆呆在Github上创建了新项目,并在本地创建了代码目录:
mkdir newProject
cd newProject
复制代码
接着小呆呆用git init
在代码目录下初始化git项目:
git init
复制代码
随后小呆呆使用git add
添加了README.md和.gitignore文件,并使用git commit
提交代码:
touch README.md
touch .gitignore
git add --all
git commit -m '小呆呆的首次提交'
复制代码
如果要使用
git add
的--all
选项,请确保先仔细比对改动哦
接着通过git remote add
添加远程地址:
git remote add origin git@github.com:xdd/newProject.git
复制代码
最后通过git push origin --up-stream
设置远程上游为master并推送:
git push origin -u master
复制代码
提交代码
- 组长:小呆呆,下班前代码提交一下哦。
- 小呆呆:好哒 (๑•̀ㅂ•́)و✧
先用git status
查看当前修改的文件:
git status
复制代码
git diff
可以查看具体的修改:
git diff
复制代码
确认无误后,添加新增/改动的文件:
git add -A
git commit -m '哈哈哈'
复制代码
- 组长:小呆呆,“哈哈哈”是个啥,提交信息要填写有意义的信息!
- 小呆呆:对不起 (>人<;)
可以使用git commit --amend
修改尚未推送的提交的信息
git commit --amend -m 'feature: 小呆呆添加的新功能'
复制代码
回滚代码
- PM:小呆呆,昨天说要修改的功能,还是先不修改吧
- 小呆呆:代码已经提交了啦 (°ー°〃)
- 组长:回滚一下提交吧
先用git log
查看一下提交日志,找到需要回滚的提交:
git log
复制代码
然后用git revert
回滚提交:
git revert <commit_number>
复制代码
- PM:之前说要修改的功能,现在要加上啦
- 小呆呆:已经回滚了啦 (°ー°〃)
- 组长:可以回滚回滚的提交啦
如果要将某次提交之后的改动全部回滚,还可以使用git reset --hard
:
git reset --hard <commit_number>
git push -f
复制代码
检出项目
- 小呆呆:组长,我换电脑啦,怎么把代码拷贝过来呀 (@_@;)
- 组长:git clone呀
git clone git@github.com:xdd/newProject.git
复制代码
丢弃本地修改
- 小呆呆:组长,这些代码改错啦,怎么办呀 (@_@;)
- 组长:这些修改不要啦吗?那就丢弃了吧
可以使用git checkout
丢弃尚未添加的修改
git checkout -- .
复制代码
如果改动已经添加但还未提交,可以用git reset
先取消添加:
git reset HEAD .
复制代码
暂存修改
- 组长:小呆呆,有个紧急bug需要立即修复呀
- 小呆呆:现在的需求正开发到一半呢 (°ー°〃)
如果不想提交开发到一半的代码,可以使用git stash
暂存当前的修改:
git stash
复制代码
在完成其他工作之后,再取出之前暂存的修改:
git stash pop
复制代码
项目地址迁移
- 组长:我们要把项目从Github迁移到gitee啦
- 小呆呆:怎么迁移呀 (°ー°〃)
可以通过git remote rm
和git remote add
来修改远程仓库地址:
git remote rm origin
git remote add origin 'git@gitee.com:xdd/newProject'
复制代码
使用git remote -v
或git remote show
来查看远程地址:
git remote -v
git remote show origin
复制代码
当然,可以添加多个远程地址而不止一个
origin
,这里就不展开啦
使用分支
- 组长:小呆呆,新来的同事会和你一起开发,现在开始要规范使用使用分支啦
- 小呆呆:好哒 (๑•̀ㅂ•́)و✧
- 组长:以后每次迭代就从dev分支上切出开发分支吧
用git fetch
可以同步项目状态:
git fetch --all
复制代码
可以看到远程已经建立dev分支了。接下来在切换到dev分支:
git checkout dev
复制代码
随后使用git branch -b
从dev切出开发分支,并使用--up-stream
同步远程分支:
git checkout -b feature/v1.2_xdd
git push origin -u feature/v1.2_xdd
复制代码
使用git branch
命令,我们将看到本地和远程的开发分支已经建立啦:
git branch --all
复制代码
合并指定提交
- 组长:之前让你紧急修复的bug提交到dev分支啦吗?
- 小呆呆:啊!提交到我的开发分支啦 (°ー°〃)
- 组长:好的,把提交cherry-pick到dev吧
使用git log
查看提交记录,找到对应的提交:
git log
复制代码
切换到dev分支,并选取指定提交合并:
git check master
git cherry-pick <commit_number>
复制代码
如果要选取多个连续的提交,也可以使用git rebase
,这里不展开了:
# 在开发分支上
git rebase <startpoint> <endpoint> --onto dev
git checkout dev
git reset --hard <commit_number>
复制代码
合并分支
- 组长:小呆呆,这次迭代的开发完成了吗?合并回dev吧
- 小呆呆:嗯呐 (๑•̀ㅂ•́)و✧
在自己的分支上解决冲突是良好习惯之一,可以使用git pull
将远程先分支合并到自己的开发分支并解决冲突:
git pull origin dev
复制代码
随后切换到dev分支,并使用git merge
合并自己的分支:
git checkout dev
git pull
git merge feature/v1.2_xdd
复制代码
合并还可以通过
git merge --squash <branch_name>
或git rebase -i <start_commit> <end_commit>
来执行,这两种方法会将多个提交合并为一个,使得提交记录更简洁,但修改提交记录也会引入新的问题,这里就不展开了。
删除分支
最后,删除临时的开发分支:
git branch -D feature/v1.2_xdd # 删除本地分支
git push origin :feature/v1.2_xdd # 删除远程分支
复制代码
使用git branch --all
可以看到,分支被删除了。
使用tag
小呆呆开发的项目终于要上线啦!通过tag
来管理代码部署是一个好习惯。
查看标签
使用git tag
或是git tag -l
查看标签列表:
git tag
git tag -l 'v1.3*'
复制代码
使用git show <tag_name>
查看制定tag
的信息:
git show <tag_name>
复制代码
添加标签
git tag -a v1.3.2 -m '修复几个小Bug'
git push --tags
复制代码
从远程同步tags
git fetch --tags
复制代码
git fetch --all
操作也包含了标签的同步
来自故宫淘宝的小呆呆: