Git
1.安装Git,按默认选项安装即可。
2.安装完成后,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
3.右击项目的目录,点Git Bash Here,通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的(勿删),
如果没有看到.git目录,那是因为这个目录默认是隐藏的。
4.把文件添加到仓库:先添加后提交
使用 $ git status 弹出很多文件夹或者文件是红色的,说明还没有加入到仓库中。
先添加:
$ git add 文件名 选择该文件加入
$ git add . 选择所有文件或者文件夹加入,接着$ git status,弹出所有文件都是绿色的。
后提交:
$ git commit -m "本次提交的说明"
1.安装Git,按默认选项安装即可。
2.安装完成后,在命令行输入:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址。
3.右击项目的目录,点Git Bash Here,通过git init命令把这个目录变成Git可以管理的仓库:
$ git init
当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的(勿删),
如果没有看到.git目录,那是因为这个目录默认是隐藏的。
4.把文件添加到仓库:先添加后提交
使用 $ git status 弹出很多文件夹或者文件是红色的,说明还没有加入到仓库中。
先添加:
$ git add 文件名 选择该文件加入
$ git add . 选择所有文件或者文件夹加入,接着$ git status,弹出所有文件都是绿色的。
后提交:
$ git commit -m "本次提交的说明"
Git常用命令:
1、$ git status 查看有没文件被修改或有没添加到仓库
2、$ git diff 查看difference,查看做了什么修改
3、$ git log 查看版本记录:版本号、姓名、邮箱、说明
commit 4ed3bb01487526a38dafdab0ed38ab95bd854aef (HEAD -> master) 此行中间部分为版本号
Author: daxiong <873494264@qq.com>
Date: Fri May 22 14:56:16 2020 +0800
添加了欧美
如果记录太多,按enter继续往下看,按q退出。
4、$ git reflog
查看命令历史,可以找到最新的版本。当reset回到旧的版本,$ git log是无法查看最新版本的。
每一行最前面的是版本号。
e01e569 (HEAD -> master) HEAD@{0}: commit: 删除了欧美
4ed3bb0 HEAD@{1}: reset: moving to 4ed3bb0
95cb1f2 HEAD@{2}: reset: moving to 95cb1f24469be5041c85100355f58c3507708890
4ed3bb0 HEAD@{3}: commit: 添加了欧美
95cb1f2 HEAD@{4}: commit (initial): 创建的第一个版本
5、$ git reset --hard 版本号
回到某个版本
6、$ git checkout 文件名 撤销修改。不想把文件添加和提交到仓库,只想撤销修改,回到原内容。
$ git checkout . .是所有文件
7、面试题:如果代码出现bug,你如何解决?
使用git stash把正在开发的功能放在某个地方,然后创建一个bug分支,然后对bug进行修改,
修改完成之后,合并到master分支,最后删除bug分支。
简记:git stash-->git branch bug-->git checkout bug--修改bug-->
git checkout master-->git merge bug-->git stash pop
7.1 把正在开发的功能放在某个地方:
$ git stash
7.2 创建一个bug分支:
$ git branch bug
相当于把master的代码复制一份放在bug分支里面。
7.3 查看分支列表:
$ git branch
86159@LAPTOP-AS7C46T9 MINGW64 ~/PycharmProjects/d522hot (master)
$ git branch
bug
* master
可以看到当前分支是master
7.4 切换到bug分支:
$ git checkout bug
Switched to branch 'bug'
然后使用$ git branch就可以看到已经切换到bug分支,当前分支前面会标一个*号
7.5 对bug修改完成之后,记得提交,然后合并到master分支。
先切换回master分支: $ git checkout master
然后合并:$ git merge bug
注意:如果旧的跟新的某一行有一样的内容,可能会发生冲突。
$ git merge bug
Auto-merging templates/index.html
CONFLICT (content): Merge conflict in templates/index.html
Automatic merge failed; fix conflicts and then commit the result.
7.6 删除bug分支:在master分支才可以删除,在bug分支删除bug分支是不可以的
$ git branch -d bug
$ git branch -D bug强行删除
7.7 拿回正在开发的新功能的代码:
查看正在开发的代码放哪里了:
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
拿回:
$ git stash pop
再次$ git stash list看不到有stash的内容了,说明已经恢复了。
GitHub:
推送分支到GitHub:
1、登录之后,先创建仓库create repository,输入项目名d522hot和描述,点create repository。
2、复制GitHub中的git remote add origin https://github.com/liangjingxiong/d522hot.git
粘贴到Git中。
3、推送master分支到GitHub:
git push -u origin master
完成之后,刷新页面就可以看到项目的所有文件
注意:第一次push的时候,应该输入$ git push -u origin master
参数-u指定origin为默认主机,后面就可以不加任何参数使用git push了
4、推送bug分支到GitHub:
git checkout bug先切换到bug
git push origin bug
从GitHub拉取分支到本地:
1、电脑创建一个文件名是项目名的空文件夹:打开文件夹,右击点Git Bash Here,然后Git中输入
git clone https://github.com/liangjingxiong/d522hot.git
复制下来的是d522hot文件夹,输入cd d522hot进入项目里面才可以操作项目。
地址可以在GitHub里面复制,也可以在本地电脑的.git文件夹的config中找到。
此操作默认拿到的是master分支。
2、拉取bug分支:
2.1先创建bug分支:
git branch bug
2.2切换到bug分支:
git checkout bug
2.3拉取:
git pull origin bug
拉下来之后,此时项目代码就是bug代码
注意:
1、只有一台电脑,以bug分支为例,之前我push它到GitHub,然后继续修改它,后面我发现修改错了,想从GitHub中pull该分支回来覆盖,
拉之前,不管有没把修改的文件添加和提交到仓库,git pull origin bug之后都提示already up to date,无法拉回来。
解决办法:通过git reset --hard 版本号 回到以前的版本。
如果有两台电脑,例如家里一台,公司一台,家里push然后公司pull,或者公司push家里pull,没上面的问题。
2、push和pull的时候,如果打开GitHub中该项目的文件,操作就会失败。
3、如果Git只有一个master分支,从GitHub拉bug分支回来(git pull origin bug),
就会覆盖master的代码,但是还是master分支。
4、rebase用法:rebase把分叉的提交历史“整理”成一条直线。
4.1 举个例子,在公司开发1.py,下班回家前忘记push到GitHub,回家之后开发了2.py并且push到GitHub,
第二天到公司,是无法push 1.py到GitHub的,因为1.py的时间比2.py要早并且有可能覆盖了2.py,
所以GitHub不给push,如果push就报错:
报错信息:
To https://github.com/liangjingxiong/n1.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/liangjingxiong/n1.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
这时,
使用git fetch origin 分支,从GitHub拉取该分支放在本地仓库,因为1.py和2.py都在本地仓库,
接着使用git rebase origin/分支 或者 git merge origin/f分支 进行合并。合并之后,使用
git push origin dev这样就可以把1.py和2.py都push给GitHub了。
4.2 当多人合作开发一个项目时,本地仓库落后于远程仓库是一个非常正常的事情,
假设我正在使用的是本地仓库的分支是dev,做了开发或者修改,commit了给本地仓库,但是没有push到GitHub,
而另一位开发者也是使用dev,他做了开发或者修改并且push到GitHub,那么,如果我push就会报错。
情况跟上面例子一样。
这时,我应该这样操作:
1、git fetch origin dev
2、git rebase origin/dev或git merge origin/dev
3、git push origin dev
4.3 多人协同开发的时候,合并是经常发生冲突的,项目成员必须在一起的时候才合并,方便解决冲突,
并且合并的时间不能太长,例如一两天合并一次,或者短时间内完成了一个小功能就合并一次。
5、协同开发:我跟我的小伙伴都对同一个文件进行了修改,怎样解决冲突?
解决办法的链接:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320
6、什么是代码Review?
代码review是指在软件开发过程中,通过对源代码进行系统性检查来确认代码实现的质量保证机制
如何做代码review?
创建review分支,把几个人的代码都合并到里面,先让组长检查,检查过没问题才合并到dev分支。
7、怎样在GitHub上给别人代码添加功能或者修改bug?
7.1 fork,就可以拿到别人的代码放在自己的GitHub仓库,接着拉到本地仓库进行修改,修改完成,推送回GitHub。
7.2 点pull request告诉别人,如果别人检查过你的代码没问题并且同意之后,就可以了。然后,这个项目还有你贡献代码的记录。
8、push或pull的时候频繁要求输入用户名和密码,怎样解决?
创建SSH私钥和公钥:
8.1 $ ssh-keygen.exe
8.2 接着按几次enter,在(/c/Users/86159/.ssh/id_rsa)这个地址生成了私钥id_rsa和公钥id_rsa.pub,
打开公钥,并且复制里面的密码。
8.3 点击GuiHub右上角小图标-->settings-->SSH and GPG keys-->粘贴到key中
这样,拉分支的时候就使用User SSH的地址git@github.com:liangjingxiong/project524.git,
而不是使用HTTPS,就解决了这个问题。
9、创建版本(标签):
9.1 git tag -a v1.0 -m '版本介绍' 本地创建Tag
git push origin --tags 推送之后,就可以给GitHub当前的分支添加版本了,
然后在release中可以看到。
9.2 删除标签:
git tag -d v1.0 先本地删除Tag
git push origin :refs/tags/v0.2 接着远程删除
git show v1.0 查看
git tags -n 查看本地Tag
git tag -l 'v1.4.2.*' 查看本地Tag,模糊匹配
git checkout v.10 切换tag
git fetch origin tag V1.2
git pull origin --tags
git clone -b v1.0 git@github.com:liangjingxiong/project524.git 克隆版本
详细点击上面链接
1、$ git status 查看有没文件被修改或有没添加到仓库
2、$ git diff 查看difference,查看做了什么修改
3、$ git log 查看版本记录:版本号、姓名、邮箱、说明
commit 4ed3bb01487526a38dafdab0ed38ab95bd854aef (HEAD -> master) 此行中间部分为版本号
Author: daxiong <873494264@qq.com>
Date: Fri May 22 14:56:16 2020 +0800
添加了欧美
如果记录太多,按enter继续往下看,按q退出。
4、$ git reflog
查看命令历史,可以找到最新的版本。当reset回到旧的版本,$ git log是无法查看最新版本的。
每一行最前面的是版本号。
e01e569 (HEAD -> master) HEAD@{0}: commit: 删除了欧美
4ed3bb0 HEAD@{1}: reset: moving to 4ed3bb0
95cb1f2 HEAD@{2}: reset: moving to 95cb1f24469be5041c85100355f58c3507708890
4ed3bb0 HEAD@{3}: commit: 添加了欧美
95cb1f2 HEAD@{4}: commit (initial): 创建的第一个版本
5、$ git reset --hard 版本号
回到某个版本
6、$ git checkout 文件名 撤销修改。不想把文件添加和提交到仓库,只想撤销修改,回到原内容。
$ git checkout . .是所有文件
7、面试题:如果代码出现bug,你如何解决?
使用git stash把正在开发的功能放在某个地方,然后创建一个bug分支,然后对bug进行修改,
修改完成之后,合并到master分支,最后删除bug分支。
简记:git stash-->git branch bug-->git checkout bug--修改bug-->
git checkout master-->git merge bug-->git stash pop
7.1 把正在开发的功能放在某个地方:
$ git stash
7.2 创建一个bug分支:
$ git branch bug
相当于把master的代码复制一份放在bug分支里面。
7.3 查看分支列表:
$ git branch
86159@LAPTOP-AS7C46T9 MINGW64 ~/PycharmProjects/d522hot (master)
$ git branch
bug
* master
可以看到当前分支是master
7.4 切换到bug分支:
$ git checkout bug
Switched to branch 'bug'
然后使用$ git branch就可以看到已经切换到bug分支,当前分支前面会标一个*号
7.5 对bug修改完成之后,记得提交,然后合并到master分支。
先切换回master分支: $ git checkout master
然后合并:$ git merge bug
注意:如果旧的跟新的某一行有一样的内容,可能会发生冲突。
$ git merge bug
Auto-merging templates/index.html
CONFLICT (content): Merge conflict in templates/index.html
Automatic merge failed; fix conflicts and then commit the result.
7.6 删除bug分支:在master分支才可以删除,在bug分支删除bug分支是不可以的
$ git branch -d bug
$ git branch -D bug强行删除
7.7 拿回正在开发的新功能的代码:
查看正在开发的代码放哪里了:
$ git stash list
stash@{0}: WIP on dev: f52c633 add merge
拿回:
$ git stash pop
再次$ git stash list看不到有stash的内容了,说明已经恢复了。
GitHub:
推送分支到GitHub:
1、登录之后,先创建仓库create repository,输入项目名d522hot和描述,点create repository。
2、复制GitHub中的git remote add origin https://github.com/liangjingxiong/d522hot.git
粘贴到Git中。
3、推送master分支到GitHub:
git push -u origin master
完成之后,刷新页面就可以看到项目的所有文件
注意:第一次push的时候,应该输入$ git push -u origin master
参数-u指定origin为默认主机,后面就可以不加任何参数使用git push了
4、推送bug分支到GitHub:
git checkout bug先切换到bug
git push origin bug
从GitHub拉取分支到本地:
1、电脑创建一个文件名是项目名的空文件夹:打开文件夹,右击点Git Bash Here,然后Git中输入
git clone https://github.com/liangjingxiong/d522hot.git
复制下来的是d522hot文件夹,输入cd d522hot进入项目里面才可以操作项目。
地址可以在GitHub里面复制,也可以在本地电脑的.git文件夹的config中找到。
此操作默认拿到的是master分支。
2、拉取bug分支:
2.1先创建bug分支:
git branch bug
2.2切换到bug分支:
git checkout bug
2.3拉取:
git pull origin bug
拉下来之后,此时项目代码就是bug代码
注意:
1、只有一台电脑,以bug分支为例,之前我push它到GitHub,然后继续修改它,后面我发现修改错了,想从GitHub中pull该分支回来覆盖,
拉之前,不管有没把修改的文件添加和提交到仓库,git pull origin bug之后都提示already up to date,无法拉回来。
解决办法:通过git reset --hard 版本号 回到以前的版本。
如果有两台电脑,例如家里一台,公司一台,家里push然后公司pull,或者公司push家里pull,没上面的问题。
2、push和pull的时候,如果打开GitHub中该项目的文件,操作就会失败。
3、如果Git只有一个master分支,从GitHub拉bug分支回来(git pull origin bug),
就会覆盖master的代码,但是还是master分支。
4、rebase用法:rebase把分叉的提交历史“整理”成一条直线。
4.1 举个例子,在公司开发1.py,下班回家前忘记push到GitHub,回家之后开发了2.py并且push到GitHub,
第二天到公司,是无法push 1.py到GitHub的,因为1.py的时间比2.py要早并且有可能覆盖了2.py,
所以GitHub不给push,如果push就报错:
报错信息:
To https://github.com/liangjingxiong/n1.git
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/liangjingxiong/n1.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
这时,
使用git fetch origin 分支,从GitHub拉取该分支放在本地仓库,因为1.py和2.py都在本地仓库,
接着使用git rebase origin/分支 或者 git merge origin/f分支 进行合并。合并之后,使用
git push origin dev这样就可以把1.py和2.py都push给GitHub了。
4.2 当多人合作开发一个项目时,本地仓库落后于远程仓库是一个非常正常的事情,
假设我正在使用的是本地仓库的分支是dev,做了开发或者修改,commit了给本地仓库,但是没有push到GitHub,
而另一位开发者也是使用dev,他做了开发或者修改并且push到GitHub,那么,如果我push就会报错。
情况跟上面例子一样。
这时,我应该这样操作:
1、git fetch origin dev
2、git rebase origin/dev或git merge origin/dev
3、git push origin dev
4.3 多人协同开发的时候,合并是经常发生冲突的,项目成员必须在一起的时候才合并,方便解决冲突,
并且合并的时间不能太长,例如一两天合并一次,或者短时间内完成了一个小功能就合并一次。
5、协同开发:我跟我的小伙伴都对同一个文件进行了修改,怎样解决冲突?
解决办法的链接:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320
6、什么是代码Review?
代码review是指在软件开发过程中,通过对源代码进行系统性检查来确认代码实现的质量保证机制
如何做代码review?
创建review分支,把几个人的代码都合并到里面,先让组长检查,检查过没问题才合并到dev分支。
7、怎样在GitHub上给别人代码添加功能或者修改bug?
7.1 fork,就可以拿到别人的代码放在自己的GitHub仓库,接着拉到本地仓库进行修改,修改完成,推送回GitHub。
7.2 点pull request告诉别人,如果别人检查过你的代码没问题并且同意之后,就可以了。然后,这个项目还有你贡献代码的记录。
8、push或pull的时候频繁要求输入用户名和密码,怎样解决?
创建SSH私钥和公钥:
8.1 $ ssh-keygen.exe
8.2 接着按几次enter,在(/c/Users/86159/.ssh/id_rsa)这个地址生成了私钥id_rsa和公钥id_rsa.pub,
打开公钥,并且复制里面的密码。
8.3 点击GuiHub右上角小图标-->settings-->SSH and GPG keys-->粘贴到key中
这样,拉分支的时候就使用User SSH的地址git@github.com:liangjingxiong/project524.git,
而不是使用HTTPS,就解决了这个问题。
9、创建版本(标签):
9.1 git tag -a v1.0 -m '版本介绍' 本地创建Tag
git push origin --tags 推送之后,就可以给GitHub当前的分支添加版本了,
然后在release中可以看到。
9.2 删除标签:
git tag -d v1.0 先本地删除Tag
git push origin :refs/tags/v0.2 接着远程删除
git show v1.0 查看
git tags -n 查看本地Tag
git tag -l 'v1.4.2.*' 查看本地Tag,模糊匹配
git checkout v.10 切换tag
git fetch origin tag V1.2
git pull origin --tags
git clone -b v1.0 git@github.com:liangjingxiong/project524.git 克隆版本
详细点击上面链接
Git其他命令:
1、cat templates/index.html 打开templates文件夹里面的index.html
2、ls 工作区文件或文件夹列表
3、创建dev分支,并且切换到dev:git checkout -b dev
相当于git branch dev 和 git checkout dev 两条命令
4、切换:
最新版本可以使用 git switch master 相当于 git checkout master。
因为checkout后面跟文件或.的时候,表示撤销修改,而跟分支则表示切换,不好理解,
所以最新版本加入了switch。
创建+切换分支:git switch -c dev
