小呆呆的Git之旅

259 阅读5分钟

新晋程序员小呆呆找到了一份开发工作,在开发过程中,小呆呆将慢慢熟悉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 rmgit remote add来修改远程仓库地址:

git remote rm origin
git remote add origin 'git@gitee.com:xdd/newProject'

使用git remote -vgit 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操作也包含了标签的同步

来自故宫淘宝的小呆呆:

来自故宫淘宝的小呆呆