| title | Github study | ||
|---|---|---|---|
| date | 2020-02-07 12:25:49 -0800 | ||
| categories |
|
||
| tags |
|
当多人合作时,可以每个人各自创建一个分支,每个分支都有明确的名称,做完自己的开发后,合并到一起
每日host更新 https://github.com/521xueweihan/GitHub520
- host文件下载地址 https://raw.hellogithub.com/hosts
- 将下载的host文件内容复制到系统hosts文件中
C:\Windows\System32\drivers\etc\hosts - 执行生效
ipconfig /flushdns
类似获取hosts的网站还有 https://hosts.gitcdn.top/
在下载的地址前加上前缀https://ghproxy.com/,例如下载SDL2的image库
代理前缀:
命令:
git clone https://gh.felicity.ac.cn/https://github.com/google/comprehensive-rust
远端仓库是存在远端服务器或PC上的git仓库,可以使用URL或文件系统的路径来访问一个远程仓库
可以把本地的repo的分支同步到remote repo,一个本地的repo可以关联多个远端repo
git remote可以查看当前关联的remote repo的路径,一般使用origin作为主干的remote repo的名称
关联一个remote repo,在本地的repo目录下,执行
git remote add origin https://github.com/memorywalker/workflow.git
其中的origin只是一个惯例,也可以使用任意一个名称来代表远端repo,然后使用
git remote -v查看当前关联的remote repo是否正确
git remote rename newname oldname更改一个remote repo的别名
本地默认的仓库是master,而github的默认仓库是main
- 本地先使用
git:(master) git branch -m master main把master重命名为main - 把远端的main先拉取下来
git:(main) git pull origin main --allow-unrelated-histories,如果远端的main有更改,需要加--allow-unrelated-histories,否则会提示fatal: refusing to merge unrelated histories - 执行
git:(main) git push -u origin main把本地的更改同步到服务器上
git push origin master把本地的master分支发送到名为origin的远端repo,会在远端创建一个master分支
To https://github.com/memorywalker/workflow.git
* [new branch] master -> master执行git log --oneline --all可以看到当前本地更新的远端分支在哪个commit上,其中的origin/master称作追踪分支,表示一个远端分支当前指向当前的哪个commit
0f40286 (HEAD -> master, origin/master, backup) change call of dutygit pull origin hexo从名为origin的远端更新hexo分支的commit到本地,pull会合并远端分支的更改到本地
当本地的更改和远端的commit有冲突时,可能不需要git自动合并remote的更改到本地,此时需要先把远端的更改下载到本地,在本地手动合并冲突后,再把本地的push到远端
git fetch origin master从名为origin的远端下载master分支到本地,但是不合并到本地的master分支
$ git log --oneline --all
f85bd96 (origin/master) add h2 style
0f40286 (HEAD -> master, backup) change call of duty如果要把已经下载下来的合并到本地分支,需要本地执行merge命令
git merge origin/master,在本地把冲突处理
使用pull或fetch时,经常会用到stash命令先把本地的更改暂存一下。
当需要从从remote更新代码到本地时,如果本地有一些更改但是代码时临时不完整的,没必要commit到库里生成一次有效提交记录,可以使用git stash命令把本地的所有临时更改缓存到一个栈列表中。如果本地还有一些没有add的文件,可以使用git stash -u把所有没有commit的内容暂存起来,本地的代码会变为最后一次commit的状态,这时再执行git fetch把远端的更改下载下来。
当把远端的代码下载下来后,或有别的更改处理完成后,可以使用git stash pop把之前暂存的内容回复回来。
使用git stash list查看所有的暂存项。
git shortlog可以查看每一个提交者提交了多少次以及每次提交信息,默认使用作者的名称字母顺序,可以增加-n安提交次数降序排列,-s只显示提交次数,不显示提交信息
git log --author=xxx 只显示作者名字以xxx开始提交的日志,如果名字中有空格,需要使用""包住
git log --grep=bug和git log --grep bug过滤commit的信息中有bug的commit,这里grep的规则和shell的grep相同,如果有空格也需要""包住
rebase可以把多个commit合并到一起,如果和多人一起工作,不要把已经push过的commit执行rebase,这样会导致其他人本地的和库里面的不一致,合并起来很麻烦。
git rebase -i HEAD~3从HEAD~3的位置重新创建一个base,这个commit之后的会合并到一起,之后git log不会看见已经合并的这些commit,-i标识交互的方式进行rebase
在执行rebase之前可以先创建一个backup分支,避免rebase之后被合并的commit被删除了无法恢复
* c4f25cd (HEAD -> backup, master) change h2 style
|\
| * f85bd96 (origin/master) add h2 style
* | ff309fe add h2 style local
|/
* 0f40286 change call of duty
* 65d78c2 Revert "change title"
* ee4190c change title执行git rebase -i HEAD~3后
pick 0f40286 change call of duty
pick ff309fe add h2 style local
pick f85bd96 add h2 style
# Rebase 65d78c2..c4f25cd onto 65d78c2 (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# r, reword <commit> = use commit, but edit the commit message
# e, edit <commit> = use commit, but stop for amending
# s, squash <commit> = use commit, but meld into previous commit
# f, fixup <commit> = like "squash", but discard this commit's log message
# x, exec <command> = run command (the rest of the line) using shell
# b, break = stop here (continue rebase later with 'git rebase --continue')
# d, drop <commit> = remove commit
# l, label <label> = label current HEAD with a name
# t, reset <label> = reset HEAD to a label
# m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]修改其中的内容,从下向上依次是最早的commit,前缀改为s,说明要把这个commit合并到它的上一个commit,而r对这次提交重新写commit信息,作为最后rebase的新的commit的信息
r 0f40286 change call of duty
s ff309fe add h2 style local
s f85bd96 add h2 style保存文件后,会提示编辑commit信息
合并后65d78c2现在是master的base,中间的其他commit都没有了,不过backup分支还有备份
* fc0772e (HEAD -> master) add h2 style
| * 9848bbf (readme) add readme file
| * c4f25cd (backup) change h2 style
| |\
| | * f85bd96 (origin/master) add h2 style
| * | ff309fe add h2 style local
| |/
| * 0f40286 change call of duty
|/
* 65d78c2 Revert "change title"
* ee4190c change title
拷贝一份其他人的repo到自己的账户
remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information.
现在github不再使用用户名密码作为验证,而使用token,这个token在Settings->Developer Settings Personal Access Tokens (github.com) 生成,在生成的页面会显示一次,需要自己保存好,每一个token可以有不同的权限和有效期设置
本地push时,输入用户名后,提示输入密码要用这个新生成的token(一串字符)作为密码登陆
如果要给公共库提交更改,要先查看库的贡献说明文档;查看issue列表是否有类似的问题,咨询库的所有者是否有人在处理这个问题、自己是否可以处理,避免浪费工作时间;是不要提交一个issue来追溯这个更改
github的issue不只是bug,可以是项目相关的任何问题,可以把一个issue指派给一个人或一个版本,一个issue下面可以评论,你也可以订阅这个issue,只要有变化,你都会收到通知
如果一个项目有CONTRIBUTING.md这个文件,在给项目新建issue时,会在页面的最下提示Remember, contributions to this repository should follow its contributing guidelines. 链接到项目的贡献说明文档
master分支作为默认的分支一般用来放所有的commit,而更改一个故障可以创建一个topic分支,分支的命就可以是bug-xxx之类,不要在master分支做自己的更改
尽量经常提交小的commit,一个commit的更改一定不能太多,比如十几个文件,几百行代码,因为管理者在合并你的代码时,可能会觉得其中的一部分时合适的,而另一部分不合适,如果全部放在一个commit里,无法单独更改
做了更改之后,不要忘记更多readme文件
当你在forked的项目上修改了一个故障,此时需要原始的项目维护者从你forked的项目pull这个更改到原始的项目上时,做的一个request
常规流程:
- fork一个原始项目AA到自己的账户下
- 把forked的项目下载到本地,并创建一个topic分支进行更改
- 把topic分支的更改push到自己的账户
- 在GitHub创建一个pull request并选择更改的topic分支
watch:当项目有任何的变化都会通知到你的邮箱,如果你是项目的维护者,需要这个
star:在自己的主页可以看到项目的更改,但是不会主动通知
fork的项目在本地更改后,原始的项目可能已经更新了内容,但是还是需要把源项目的更改同步过来的
-
在本地的项目中增加源项目作物一个remote repo
git remote add upstream https://github.com/udacity/course-collaboration-travel-plans.gitupstream通常作为原始项目的remote的别名 -
git remote -v查看本地的项目应该是关联了两个remote的repo -
git fetch upstream master从源项目获取最新的更改 -
git checkout master本地的分支切换到master分支 -
git merge upstream/master合并远端upstream的master分支到本地的master分支 -
git push origin master把最新的master推到自己的GitHub的项目的master上
-
git push origin 提示
OpenSSL SSL_read: Connection was reset, errno 10054网络原因导致失败,可以多试几次,也可以关闭ssl验证
git config --global http.sslVerify "false" -
重装系统后提示
git@github.com: Permission denied (publickey)因为ssh没有正确配置,需要在C:\Users\Edison\.ssh\目录下新建config文件,配置以下内容。github_rsa是自己的私钥文件,需要拷贝到.ssh目录中。再执行ssh -vT git@github.com确认认证成功
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/github_rsahttp://www.firsttimersonly.com/
defacto 事实上; 事实; 事实上的; 实际上; 实际上的
substantial 大量的; 价值巨大的; 重大的; 大而坚固的; 结实的; 牢固的
a11y stands for "accessibility". In the word "accessibility", there are eleven letters between the a and the y, so it gets shortened to just a11y
squash 压软(或挤软、压坏、压扁等); 把…压(或挤)变形; (使) 挤进; 塞入; 打断; 制止; 去除; 粉碎; 墙网球; 壁球; 果汁饮料; 南瓜小果