ArtOfTesting
介绍
这是关于ArtOfTesting的一些思考与探索。
github地址
gitee地址
二、常用Git命令训练
- 1、安装GIT服务
- 2、注册Git账号
- 3、建立git仓库(附流程重点)
- 4、进入git仓库(重点)
- 附录
- 仓库
- 配置
- 增加/删除文件
- 代码提交
- 分支
- 标签
- 查看信息
- 显示有变更的文件
- 显示当前分支的版本历史
- 显示commit历史,以及每次commit发生变更的文件
- 搜索提交历史,根据关键词
- 显示某个commit之后的所有变动,每个commit占据一行
- 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
- 显示某个文件的版本历史,包括文件改名
- 显示指定文件相关的每一次diff
- 显示过去5次提交
- 显示所有提交过的用户,按提交次数排序
- 显示指定文件是什么人在什么时间修改过
- 显示暂存区和工作区的差异
- 显示暂存区和上一个commit的差异
- 显示工作区与当前分支最新commit之间的差异
- 显示两次提交之间的差异
- 显示今天你写了多少行代码
- 显示某次提交的元数据和内容变化
- 显示某次提交发生变化的文件
- 显示某次提交时,某个文件的内容
- 显示当前分支的最近几次提交
- 远程同步
- 撤销
- 其他
1、安装GIT服务
1)在你自己的Linux服务器(Mac也可以),安装git服务
参考文章http://istester.com/git/118.html
博文:https://blog.csdn.net/m0_46278037/article/details/118789168
当然,windows用git命令行,也是可以玩的 。
如果还没有Linux服务器,参考文章(虚拟机 / 或 云服务器)
http://istester.com/linux/384.html
补充,如果已经安装了的,可以试试初始化一个git仓库。
2、注册Git账号
去git远程仓库,注册一个你自己的账号(用来后续的拉代码、提交代码、更新代码);
注册地址:http://git.istester.com/
注:如上,自己注册账号即可,后续git仓库项目,需要用到账号的,用此账号即可;
补充,已经有账号的,可以自己先试试,把:http://t.istester.com:3000/21DayisTester/LinuxBlog.git 代码拉到你电脑本地。
3、建立git仓库(附流程重点)
1)建立你自己的专属「远程Git代码仓库」
创建账号后如何创建自己的库:
知乎链接:https://zhuanlan.zhihu.com/p/91652100
(1)选择创建一个新仓库
(2)填写创建仓库相关信息
注意:
- 仓库名尽量使用数字+英文字母,少用其它符号;如果想要自己的仓库可被实时访问,命名必须使用:<我的名字>.github.io,如ArtOfTseting.github.io
[Add .gitignore]:后期配置的文件,帮助我们在git add时将我们指定的一些文件自动排除在外,不提交到git当中。
博文链接:https://zhuanlan.zhihu.com/p/264995020[Choose a license]:即开源许可证即授权条款。开源软件并非完全没有限制。最基本的限制,就是开源软件强迫任何使用和修改该软件的人承认发起人的著作权和所有参与人的贡献。
博文链接:https://blog.csdn.net/qq_35246620/article/details/77647234
(3)如何将本机电脑,链接到GIT仓库
- 进入当前登录的电脑用户C盘
[C:\Users\当前登录用户\.ssh],选择[.ssh]的文件夹:(这里我出现了没有SSH文件夹的情况,但是随便找的一个文件夹生成秘钥后,也没什么问题) - 右键单机空白处,选中
[Git Bash here]功能;输入以下命令,创建公钥和私钥:
$
ssh-keygen -t ed25519 -C "Git账号登录的邮箱"
其中,[ed25519]是GitHub的加密算法,常用有rsa(长度较长)等
[Enter file in which to save the key]是指定生成的文件名,可以不选直接回车;
[Enter passphrase]是输入SSH链接的密码,后期可能比较麻烦,会频繁需要这个密码才能登陆;\
- 回车完后,会生成两个文件
[id_ed25519]、[id_ed25519.pub],带pub的是公钥文件,需要到GitHub上配置:
4、进入git仓库(重点)
1)进入「你自己的远程仓库」;
2)查看你的仓库地址\
参考文章http://istester.com/git/442.html
博文链接:
使用git拉取远程仓库代码:
https://blog.csdn.net/qq_35408421/article/details/119213912
https://blog.csdn.net/ly_xiamu/article/details/110848431
如何将代码仓库拉取到本地,并将本地文件上传到Github
1、设置提交时的用户名
git config --global user.name '想设置的用户名'
git config --global user.email '想设置的邮箱'
查看当前系统用户:
git config -l | grep user
在某文件夹的仓库下提交,可以使用:
$ git config --local user.name 'newname'
2、使用SSH协议链接,并使用git clone拉取远程仓库;
git clone [仓库SSH的链接或者HTTP的链接],如
$ git clone https://github.com/tianqixin/runoob-git-test
3、常用命令:
Git status:查看缓冲区文件
Git add .:将所有文件添加到提交文件
Git commit:提交文件到远程仓库,如:
git commit -m "提交说明"
Git push origin 分支名:将提交的代码提交到某分支;
git push -u origin main:将代码推送到远程仓库
Git checkout 分支名:切换分支
Git checkout .:撤销所有修改,将[.]换成文件名为撤销指定文件;
Git branch:查看当前所在分支,[-a]查看当前仓库所有分支
注:
(1)仅克隆时无需指定username、password
(2)仅以此文件夹为提交文件夹,需要将[global]改成local
(3)链接自己的仓库,使用SSH方式,可以直接读取C盘下的私钥,不用输入用户名、密码;HTTPS方式适用于拉取他人的仓库;
(4)删除仓库:仓库页面的Setting中,下滑到最后有Delete选项;
(5)Git clone SSH链接:在任意文件夹中使用即可;
4、新建本地文件夹,链接远程仓库
参考博文:
https://cloud.tencent.com/developer/article/1504684
https://blog.csdn.net/generallizhong/article/details/94014779
1)新建文件夹,Git bash here,使用git init命令,使其成为一个git仓库(此处注意git和github没有半毛钱关系,github是远程仓库)
2)运行命令:
git status
Git add .
Git commit -m "first commit"
3)链接Github,此处使用SSH生成密匙,在Github创建仓库,上传公钥\
链接远程仓库
$ git remote add origin SSH的链接
注:移除远程仓库:
git remote
提交到远程仓库
$ git push -u origin master
5、新建本地分支并拉取代码
1)新建本地分支(分支名,用你自己的昵称;如老徐 用 idoxu)参考命令:
git branch idoxu
2)建立你本地电脑的代码仓库目录
mkdir -p ~/istester_git
3)把上面第2步获取的仓库代码拉到你本地 ;
参考文章http://istester.com/git/445.html
6、查看本地分支
查看本地分支
git branch
7、切换分支
1)切换到你新建的本地分支
git checkout idoxu
快捷可食用:git co 分支名
2)查看当前所在的分支\
git branch
效果:
[root@istester gittest]# git checkout idoxu
Switched to branch 'idoxu'
[root@istester gittest]# git branch
* idoxu
master
8、本地分支push到远程服务器
把新建的本地分支push到远程服务器,远程分支与本地分支同名
1)命令
git push origin idoxu:idoxu
2)效果
[root@istester gittest]# git push origin idoxu:idoxu
Total 0 (delta 0), reused 0 (delta 0)
To http://t.istester.com:3000/istester/gittest.git
* [new branch] idoxu -> idoxu
9、查看远程仓库分支
查看远程仓库有哪些分支
1)命令
git branch -a
2)效果
[root@istester gittest]# git branch -a
idoxu
* idoxu_dev
idoxudev
master
remotes/origin/HEAD -> origin/master
remotes/origin/idoxu
remotes/origin/master
10、创建并切换到某分支
创建你昵称的dev分支,并切换到那个分支\,比如:
git checkout -b idoxu_dev
11、删除本地分支
删除之前你自己创建的,自己昵称的dev分支(如老徐 idoxu_dev)
1)命令
git branch -d
2)效果
如果提示无法删除;
[root@istester gittest]# git branch -d idoxu_dev
error: Cannot delete branch 'idoxu_dev' checked out at '/root/gittest'
先切换到其他分支
[root@istester gittest]# git checkout idoxu
Switched to branch 'idoxu'
再删除
[root@istester gittest]# git branch -d idoxu_dev
Deleted branch idoxu_dev (was 293eda3).
- 注:-d 与 -D 的比较,另删除远程分支是其它命令
git branch -d <branchName>:删除一个名字为branchName的分支。如果该分支有提交未进行合并,则会删除失败。
git branch -D <branchName>:强制删除一个名字为branchName 的分支。如果该分支有提交未进行合并,也会删除成功。
git删除远程分支
git push origin --delete [branch_name]
12、切换到某分支,修改某文件
1)切换到 你自己的昵称的本地分支;如老徐 的 idoxu
git branch idoxu
2)修改文件 start_ByIdo.sh ,底部追加你的分支名注释
echo '#idoxu' >> start_ByIdo.sh
13、查看仓库文件改动状态
1)命令
git status
2)效果
[root@istester gittest]# git status
On branch idoxu
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: start_ByIdo.sh
no changes added to commit (use "git add" and/or "git commit -a")
14、查看文件 start_ByIdo.sh 具体改动了啥内容
1)命令
git diff start_ByIdo.sh
2)效果
[root@istester gittest]# git diff start_ByIdo.sh
diff --git a/start_ByIdo.sh b/start_ByIdo.sh
index 792a827..09f73c6 100644
--- a/start_ByIdo.sh
+++ b/start_ByIdo.sh
@@ -1 +1,2 @@
nohup ./gogs web >>/dev/null 2>&1 &
+#idoxu
15、添加修改的文件并提交修改
1)添加修改的文件
git add .:提交修改
git commit -m "idoxu add"
16、提交本次代码到远程idoxu分支(你自己的分支)
git push origin idoxu:idoxu
17、去远程仓库,查看提交记录
参考文章http://istester.com/git/450.html
18、从零开始,新建远程仓库,提交自己的本地代码到远程仓库
仓库文章http://istester.com/git/458.html
19、仓库流程练习
1)新建一个自己的远程仓库;
2)把自己本地的代码,提交到远程仓库;
3)切换一个新的功能分支 istester/21day ;
4)开发代码,提交到分支;\
参考文章http://istester.com/git/459.html
- 合并分支
参考文章http://istester.com/git/466.html
20、解决合并冲突,自己如何模拟?
1)在前几天作业的基础上,再新建一个分支 istester/git21day
git checkout -b istester/git21day
2)修改idoxu.ini文件
vim idoxu.ini
3)随便修改点内容
4)切到master分支
5)合并istester/git21day 到master分支 ,参考昨天的文章:http://istester.com/git/466.html
6)切换到昨天作业的分支 istester/21day
7)重复如上 2、3、4 步骤
8)合并istester/21day 到master分支 ,参考昨天的文章:http://istester.com/git/466.html
9)查看是否有冲突?如有修改解决,如没有,看看哪里操作的问题;
GIt报错
1、克隆时报错
fatal: unable to access 'https://github.com/xxx/autowrite.git/':
OpenSSL SSL_read: Connection was reset, errno 10054
或者
fatal: unable to access 'https://github.com/xxx/autowrite.git/':
Failed to connect to github.com port 443: Timed out
因为git在拉取或者提交项目时,中间会有git的http和https代理,但是我们本地环境本身就有SSL协议了,所以取消git的https代理即可,不行再取消http的代理。
解决办法:
在项目文件夹的命令行窗口执行下面代码,然后再git commit 或git clone
取消git本身的https代理,使用自己本机的代理,如果没有的话,其实默认还是用git的
//取消http代理
git config --global --unset http.proxy
//取消https代理
git config --global --unset https.proxy
打印目录下当前分支
您还可以使用git symbolic-ref HEAD来显示完整的refspec。
在Git v1.8及更高版本中仅显示分支名称(感谢Greg指出):
$ git symbolic-ref --short HEAD
- 如果有多个目录(如五个demo_1、demo_2、demo_3、demo_4、demo_5),还可以使用Shell写For循环,需要vim写成sh文件,执行
#!/bin/bash
for((i=1;i<=5;i++));
do
cd demo_n$i;
git symbolic-ref --short HEAD;
pwd;
done
# 还可以集成为一条命令
for((i=1;i<=5;i++));do cd demo_n$i;git symbolic-ref --short HEAD;pwd;done
在Git v1.7 +上,您还可以执行以下操作:
$ git rev-parse --abbrev-ref HEAD
附录
以下常用命令来自阮一峰老师的博客文章《常用 Git 命令清单》,感谢阮老师!
Git 常用命令
仓库
在当前目录新建一个Git代码库
$ git init
新建一个目录,将其初始化为Git代码库
$ git init [project-name]
下载一个项目和它的整个代码历史
$ git clone [url]
配置
显示当前的Git配置
$ git config --list
编辑Git配置文件
$ git config -e [--global]
设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
增加/删除文件
添加指定文件到暂存区
$ git add [file1] [file2] ...
添加指定目录到暂存区,包括子目录
$ git add [dir]
添加当前目录的所有文件到暂存区
$ git add .
添加每个变化前,都会要求确认
对于同一个文件的多处变化,可以实现分次提交
$ git add -p
删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]
改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
代码提交
提交暂存区到仓库区
$ git commit -m [message]
提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
提交时显示所有diff信息
$ git commit -v
使用一次新的commit,替代上一次提交
如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
分支
列出所有本地分支
$ git branch
列出所有远程分支
$ git branch -r
列出所有本地分支和远程分支
$ git branch -a
新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
新建一个分支,并切换到该分支
$ git checkout -b [branch]
新建一个分支,指向指定commit
$ git branch [branch] [commit]
新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
切换到指定分支,并更新工作区
$ git checkout [branch-name]
切换到上一个分支
$ git checkout -
建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
合并指定分支到当前分支
$ git merge [branch]
选择一个commit,合并进当前分支
$ git cherry-pick [commit]
删除分支
$ git branch -d [branch-name]
删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
标签
列出所有tag
$ git tag
新建一个tag在当前commit
$ git tag [tag]
新建一个tag在指定commit
$ git tag [tag] [commit]
删除本地tag
$ git tag -d [tag]
删除远程tag
$ git push origin :refs/tags/[tagName]
查看tag信息
$ git show [tag]
提交指定tag
$ git push [remote] [tag]
提交所有tag
$ git push [remote] --tags
新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]
查看信息
显示有变更的文件
$ git status
显示当前分支的版本历史
$ git log
显示commit历史,以及每次commit发生变更的文件
$ git log --stat
搜索提交历史,根据关键词
$ git log -S [keyword]
显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s
显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature
显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]
显示指定文件相关的每一次diff
$ git log -p [file]
显示过去5次提交
$ git log -5 --pretty --oneline
显示所有提交过的用户,按提交次数排序
$ git shortlog -sn
显示指定文件是什么人在什么时间修改过
$ git blame [file]
显示暂存区和工作区的差异
$ git diff
显示暂存区和上一个commit的差异
$ git diff --cached [file]
显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]
显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"
显示某次提交的元数据和内容变化
$ git show [commit]
显示某次提交发生变化的文件
$ git show --name-only [commit]
显示某次提交时,某个文件的内容
$ git show [commit]:[filename]
显示当前分支的最近几次提交
$ git reflog
远程同步
下载远程仓库的所有变动
$ git fetch [remote]
显示所有远程仓库
$ git remote -v
显示某个远程仓库的信息
$ git remote show [remote]
增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]
取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
上传本地指定分支到远程仓库
$ git push [remote] [branch]
强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force
推送所有分支到远程仓库
$ git push [remote] --all
撤销
恢复暂存区的指定文件到工作区
$ git checkout [file]
恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]
恢复暂存区的所有文件到工作区
$ git checkout .
重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]
重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard
重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]
重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]
重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]
新建一个commit,用来撤销指定commit
后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]
暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop
其他
生成一个可供发布的压缩包
$ git archive
浙公网安备 33010602011771号