Today, I will introduce how to use Git. Git is a tool that we can use it record project logs. When we build a big project, there have many questions in development. Using Git can do a better job f in a team. We need to control source quality with Git in the pearl life project.
在用git的时候, 不知道git原理的话, 就不明白那么多git命令是在做啥? 哪些是重点? 每个命令操作了哪里。 因此有必要了解一下git。
git本身是作为一个版本管理工具, 这里其实只需要明白下面这张图就行。 我们改动的时候是在workspace, add 到了暂存区, commit到本地仓库, push到远程, pull 到工作区workspace, 此外我们需要理解git log的里面的内容, 远程分支的提交是有origin标识的, 本地的commit 和远程的commit要区分开。 因此可以说明白log和 三个区(工作区, 本地仓库, 远程仓库), 差不多就明白git怎么用了。
git clone git@hhhh.git 就是使用ssh命令, 去hhh域名下拉取某个路径的代码, 人家后面也是一个服务器。
本地和远程合并区别是啥?
用git的时候, 面对上百个命令哪些是重点命令?有些相似的命令怎么区分呢?
rebase一般是 将远程的依赖合并进来测试, 同时可以保持无记录。
revert是代码有问题, 回滚, 同时保持了记录。
fetch 是拿到分支信息, 可以用来reset或者merger等, 能同步到远程的信息。
pull是直接拉取最新的代码, 让本地的代码往后移。 pull可以merger和rebase的, 一般我都不用, 自己分支只有自己提交一般都是最新的。 拉master的时候直接rebase变基。因为master不会变commit的。
cherry pick 将自己的一个commit级别改动同步到另外一个分支, 非常方便。
rebase -i是改变自己的基准, 可以用来当做拉取最新代码, 或者别人的代码, 来测试。
merge是将自己的修改合并进上线分支,是不按时间线而是按操作的, 想要合入要保留记录, 一般合入master都用merge。 - merge --sqush会将合并进来的代码超出自己rebase部分搞成一个提交, 合入到master的时候会经常用到。
用git的时候, 面对上百个命令哪些是重点命令?有些相似的命令怎么区分呢?
basic commit;
git add .
git commit -m "XXX"
git push origin master:tianyi_dev # if you not using git ssh, push will need password and username.
4. 想打补丁
git add .
> git commit --ammend
> git push -f origin tianyi_dev
5. 想重置本地代码
git fetch --all
git reset --hard
git reset --mixed 撤回记录, 但是代码在workspace区还。
git reset --soft 撤回log, 修改在index区,直接commit就行。
6. 想让本地修改依赖的提交是最新的 (一般是测试用)
git rebase -i id
7. 提交自己的某个改动到另外一个测试分支
git cherry pick 你想要加进来的改动commitid
8 提交错误代码到线上分支想要回退
git revert id1
git revert id2
gt push or merger
9. 看diff
git diff commitid commitid
git status 看工作区的修改diff
10 各种提交和分支规范
分支有自己信息有日期有功能
commit中告诉改动了啥, fix是修改功能, demand是需求, test或者tmp是需求测试, tag是一些重要版本。 此外要带自己的改动介绍文档。
11. 有冲突怎么办
修改
git add . & commit & push
用git的时候, 有些指令虽然不常用, 但是还是会偶尔遇到的,遇到了会花比较多的时间去查询的, 这种就记录一下哈。
# check diff 只展示某个目录的区别。
git diff ada9b57 my_branchname my_changed_directory/
# make you local tack origin branch.
git branch -u origin/dev
# make your push -f orgin go back
git reflog# check commit id
git reset commit_id # back this commit
# not commit a file
if in work space:
git checkout filename
if in stash:
git reset HEAD filename.
# MakeMasterIntoSelfBranch()
git commit -m “fix bug”
git checkout master
git pull # or reset
git checkout dev
git merge master # slove confliect.
git add Test.java
git commit -m “merge master”
git push origin dev
# 配置邮箱等
// 1. git clone your ssh project;
if you clone master :
git clone git@github.com:iambest2002/pearl_life.git
esle if you clone other branch
git clone -b tianyi_dev git@github.com:iambest2002/pearl_life.git
> git config --global user.name "tianyi"
> git config --global user.email "10086@qq.com"
# 配置远程仓库
if current is ssh:
git remote remove origin ;
git remote add origin http:wwww;
git remove --v;
git fetch; # get remote log into self.
# ref 1. git push -u和git branch --set-upstream-to指令之间的区别 https://juejin.cn/post/6844904005773213704
git push --set-upstream origin liupeng_ut_work_flow2; # set local branch connect with origin. make push is ok.
# 删除自己git中子git的信息 , 不然传上去就是一个打不开的文件。
rm -rf path/.git
git rm --cached path/
git add . & commit & push