git push -u origin master时出现Username for ‘https://github.com‘:
1、在执行完git remote add origin https://github.com/xx/xxx.git
,git push -u origin master
,出现“Username for ‘https://github.com’:”这个提示,如果输入用户名(非邮箱)和密码,会出现remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.
。
2、在GitHub的Settings->Developer settings->Personal access tokens中创建一个token,出现“Username for ‘https://github.com’:”时输入用户名(如果用户名写成邮箱,可能会导致之后存储在钥匙串中时账户名称是邮箱,可能会导致之后“pod lib create xx”生成的文件将邮箱作为用户名),接着输入token作为password。
3、如果token过期,则在GitHub选中这个token然后regenerate,然后在终端执行“git push”就会要求重新输入Username和Password。
回退到某次提交
1、如果要撤销的提交记录是commit2,这个提交的前一个提交是commit1,则执行git reset --soft commit1的id
,会回退到commit1,而commit1之后的修改都保留但未提交。
2、git push origin master --force
,push之后远程的最新提交只到commit1,这个之后的提交都没有了。
修改某次提交的作者信息
1、如果要修改的提交是commit2,这个提交的上一个提交是commit1,则在终端执行git rebase -i commit1的id
,然后会自动用vim打开一个文件,显示的是pick commit2的id commit2的提交描述
(还有commit2之后的提交),输入i进入编辑模式,将pick改为edit(可以改多个提交的,但是记得每次操作完一个之后都先执行continue再操作下一个,详情看之后的步骤。),修改之后输入:wq
保持退出。
2、执行git log
查看当前HEAD,就是要修改的提交。
3、执行git commit --amend --author="abc <de@fg.com>"
修改提交的作者信息,然后会自动用vim打开一个文件显示提交的描述,可以输入:q
直接退出。(git log会发现commitid变了。)
4、执行git rebase --continue
结束修改(如果之前pick改edit时改了多个提交,则continue会进入下一个提交的修改)。
5、如果此时查看状态,会发现本地超前几个commit又滞后了几个commit,执行git push origin master --force
之后覆盖远程仓库(远程的commitid变成修改后的commitid)。【但是对于已经clone在本地的其他用户,这个用户执行git status时没有显示要更新,执行git pull还会出现一个“Merge branch ‘master’ of https://github.com/xxx”的提交commit3(此时可以执行“git reset --hard commit3的前一个提交的id(即远程最新commitid)”回退到和远程一致)。最好还是不要在多人合作仓库中用这个方法修改作者信息。】【这个修改方法会对commit2后面的所有提交都重新提交,提交的时间是当前,commitid不是原来的。而且不会删除tag,所以tag之前的提交信息还是原来的,需要删除远程和本地tag才会显示更改后的提交信息。所以,不推荐使用这个方法修改作者信息。】
tag
1、获取本地tag:git tag
2、获取远程tag:git ls-remote --tag origin
3、删除本地tag:git tag -d tag名称比如0.0.1
4、删除远程tag:git push origin :refs/tags/0.0.1
(如果仅删除远程tag,则git pull时并不会删除本地tag,需要手动删除。)
误删文件的一种恢复方法
1、不小心删除了文件,又从别的地方复制回去的时候,git status中这个文件会有删除的记录和添加的记录,如果想恢复到和远程一致,可以执行git reset --hard 远程最新commitid
,本地添加的Untracked的文件会保留。