iTesting软件测试知识分享

Git用法总结

Git常用的命令很多,不常用的话会忘记,特别是在windows上开发的同学,习惯了GUI格式(话说SourceTree真不错), 偶尔被人问到如果解决conflict,答用工具时会被鄙视,
今天就来复习下Git的常用指令。

Git的学习,有两个很好的资源,一个是廖雪峰的官网,这个真是浅显易懂,另一个是codecademy, 想深入学习的同学请移步过去,此处仅用来快速复习。

1.安装

直接官网下载,安装好后开始菜单里找到”Git”->”Git Bash”, 有命令行窗口弹出,则成功。这里通常还会设置下git通用的用户名和邮箱,方法如下:

1
2
$ git config --global user.name "此处填写你的用户名"
$ git config --global user.email "你的email"

2.创建仓库

1
2
3
4
5
1. clone 一个存在的仓库
git clone ssh://[email protected]/repo.git
2.创建一个本地仓库, switch到目标文件夹下,输入
git init

3. 本地更改

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1. 添加所有当前的changes
git add .
2.添加某一个文件
git add <file name>
3. 添加某些文件到下次commit
git add -p <file name>
4. 提交改动到本地分支
git commit -m "comments"
5. 提交所有的本地changes到本地分支, 省去了git add .
git commit -a
6.在changeID不变得情况下,覆盖上次修改的文件代码
git commit --amend

4.提交历史查询

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1.显示所有的提交记录
git log
2.显示某一个文件的历史记录
git log -p <file>
3. 让log好看点
git log --pretty=oneline
4.谁在何时改变了什么内容
git blame <file>
5.可以查看所有分支的所有操作记录(包括提交、回退、已删除的提交操作记录等)
Git reflog
 如果在回退以后又想再次回到之前的版本,git reflog 可以查看所有分支的所有操作记录(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录

5.分支和Tag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1.列出所有存在的分支
git branch
2.切换到某一个分支
git checkout <branch>
3.创建+切换分支
git checkout -b <name>
3.基于当前分支创建一个新的分支
git branch <new-branch>
4.基于远程分支创建一个分支
git branch --track <new-branch> <remote>
5.删除一个本地分支
git branch -d <branch>
6.给当前的提交打上tag
git tag <tag-name>

6.更新和提交

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
1.查看远程仓库的信息(执行该命令后,会列出当前程序对应的所有远程版本仓库的信息,含仓库名和仓库地址)
git remote -v
git remote (只是会单纯的列出所有远程仓库的名字,不会展示远程仓库的地址)
2.显示某个远程库的信息
git remote show <remote>
3.创建新的远程库, name, remote
git remote add <remote> <url>
4.下载所有远程库的改动, 但是不merge到本地
git fetch <remote>
4.下载所有远程库的改动, merge到本地
git pull <remote> <branch>
5.push本地改动到remote
git push <remote> <branch>
6.发布你的tags
git push --tags

7.Merge和Rebase

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1.merge 合并branch分支到当前分支
git merge <branch>
举例(把master分支合并到当前分支):
git checkout feature
git merge master
2.rebase 把branch合并到当前分支
git rebase <branch>
举例:
git checkout feature
git rebase master
(它会把整个 feature 分支移动到 master 分支的后面,有效地把所有 master 分支上新的提交并入过来
但是,rebase 为原分支上每一个提交创建一个新的提交,重写了项目历史,并且不会带来合并提交。)
3.解决冲突后继续合并
git rebase --continue
4.中止rebase,回到rebase前状态
git rebase --abort

8. 回退

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.丢弃所有本地更改 ,commit和index 都回回退到某个版本.(注意,这种方式是改变本地代码仓库源码)
git reset --hard HEAD
2. 对某一个文件丢弃本地的更改
git checkout HEAD <file>
3.revert一个commit (会留一个新的commit记录)
git revert <commit>
4.reset 到commit, commit后的所有提交都被丢弃
git reset --hard <commit>
5.reset到某个commit,同时保留所有本地的改动
git reset --keep <commit>

9 常见问题及解决方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
1. 你有一个远程主branch,它名字是master, A和B都从master上checkout了本地分支,并创建了远程分支。 A的本地分支和远程分支都叫A, B的都叫B。
A先改动了代码并成功Push到远程A, 然后通过pull request成功merge到master, 这时候B也成功push代码到B,然后建立pull request想push到master会出错,怎么解决?
1). 先push本地分支的改动到远程B分支上。
2). checkout -b c master 从最新的远程主分支check out一个本地分支, 我们叫C
3). git pull 通过git pull 把远程master最新改动拉下来到C
4)。 git checkout B, 切换到本地分支B, git merge C,把C的最新代码拉倒B,肯定有冲突,手工解决掉。
4)。 B git push到远程B, 并通过建立pull request的方式push到远程master
2. 提交注释错误如何回退
git commit --amend
3. 提交错误版本到本地仓库如何回退
1). git reflog 找回要回退的commit id。
2). 找到上次提交的记录id例如123, 执行 git reset --hard 123 或者 git reset --hard HEAD^
4.自己的远程分支版本回退的方法
git reflog
git reset --hard 123
git push -f (注意:本地分支回滚后,版本将落后远程分支,必须使用强制推送覆盖远程分支,否则无法推送到远程分支)
5.公共远程分支版本回退的问题
举例:改完代码测试也没有问题,但是上线后发现你的修改导致之前运行正常的代码报错,必须回滚.
git revert HEAD
git push origin master
注意:
git revert 命令意思是撤销某次提交。它会产生一个新的提交,虽然代码回退了,但是版本依然是向前的,所以,当你用revert回退之后,所有人pull之后,他们的代码也自动的回退了。
git revert 命令的好处就是不会丢掉别人的提交。
总结下:
自己的分支回滚直接用reset
公共分支回滚用revert
错的太远了直接将代码全部删掉,用正确代码替代。
🐶 您的支持将鼓励我继续创作 🐶
-------------评论, 吐槽, 学习交流,请关注微信公众号 iTesting-------------
请关注微信公众号 iTesting wechat
扫码关注,跟作者互动