标签 版本控制 下的文章

GitHub 服务状态
官方搜索关键字文档
官方搜索文档
第三方介绍搜索

MacOS、Git 的代理配置

https://www.v2ex.com/t/843383
https://juejin.cn/post/6844904100081975303

https://www.toimc.com/git%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/
git常用命令

https://www.toimc.com/git%E5%88%86%E6%94%AF%E7%AE%A1%E7%90%86/
git分支管理

第三方代理
https://fastgit.org/

你们仍未掌握那天所学的 git 知识

版本格式:主版本号.次版本号.修订号

Git飞行规则(Flight Rules)

git生成ssh key及本地解决多个ssh key的问题
安装Git:git-scm.com
客户端https://sourceforge.net/projects/git-osx-installer/files/

Git教程
Git 教程
Git中文教程
给自己点时间再记记这200条Git命令
常用 Git 命令清单
Git 简单使用说明
如何搭建一个独立博客——简明 Github Pages与 jekyll 教程
Linux之CentOS 6.7上全编译安装GitLab 7-14中文版
看完就会用的GIT操作图解分析
终于解决“Git Windows客户端保存用户名与密码”的问题
git 简单教程,个人使用
总结一下 Git 不同情况下如何回滚
因为 git pull 和同事闹僵了。
git 似乎在 windows 和 macos 上有差异?
GitHub 上 clone 一个项目下来,慢

git撤销commit 并保存之前的修改
关于git提示“warning: LF will be replaced by CRLF”终极解答
自动忽略不提交从git服务器上获取下并修改的文件
git忽略已经被提交的文件
git commit之后,想撤销commit

git——修改已经提交并push后的commit注释

git默认是不能识别中文的。需要在终端修改能识别中文。

git config --global core.quotepath false

个人空间地址变更后,执行以下命令更新你本地 git 仓库的 remote 地址,如:

git remote set-url origin https://gitee.com/badcodes/jtaro-tutorial.git

git bash 出现vim的时候怎么退出

如果是输出状态,
首先按Esc键退出输入状态,
然后按Shift+“;”,再输入q!或wq!(不保存改动,wq!是保存文件的写入修改)退出。



使用git push origin master是出现如下问题;
Username for 'https://github.com':
解决办法:
git remote set-url origin git+ssh://git@github.com/username/reponame.git

如何把自己的项目共享到 Github

**create a new repository on the command line**
echo "# xx" >> README.md
git init
git config user.name "username"  //如果使用指定用户提交
git config user.email "username@gmail.com" //如果使用指定用户邮箱提交
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/xx/xx.git
git push -u origin master

**or push an existing repository from the command line**
git remote add origin https://github.com/xx/xx.git
git push -u origin master


Enter passphrase for key 每次push 都要输入push 密码

因为当初生成SSH KEY的时候有设置密码
解决方法:

github 每次需要输入passphrase for key id_rsa 的解决办法

http://stackoverflow.com/questions/21095054/ssh-key-still-asking-for-password-and-passphrase
参考了stackoverflow
删除掉之前的passphrase密码就可以了

$ ssh-keygen -p

当提升你输入新的密码的时候,按enter就可以啦,继续确认enter就可以

Mac下输出目录树层结构的tree命令
brew install tree
安装成功后可以使用--help查看帮助信息
tree --help
tree -I “node_modules”

3.配置用户信息
git config --global user.name "你的 Github 用户名"
git config --global user.email "你的 Github 注册邮箱"

[github上fork别人的代码之后,如何保持和原作者同步的更新(转)[31]

经常看到GitHub上作者有更新,但是之前Fork了的项目没有更新到自己上
看到github上fork别人的代码之后,如何保持和原作者同步的更新
这家伙以前有个很nice的域名是doufu.ru(豆腐乳),想应该是卖了吧?
转载一下,可能以后会用到

保持和原作者同步的更新的方法

1、进入你的Github发起Pull Request
123
2、选择Compare across fork
3、然后反向操作,base改成自己的Forkhead改成原作者的,然后Github会自动比较改过的地方让后发起Pull Request,接着在自己项目的Request页面合并一下就行了。

刚用上,杠杠的

个人空间地址变更后,执行以下命令更新你本地 git 仓库的 remote 地址,如:
git remote set-url origin https://gitee.com/badcodes/jtaro-tutorial.git

git 常用命令

自定义目录名

git clone https://git.oschina.net/XXX/hello-world.git my-hello-world

git add 添加 多余文件
这样的错误是由于, 有的时候 可能

git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件

git add 如果添加了错误的文件的话

撤销操作

git status 先看一下add 中的文件
git reset HEAD 如果后面什么都不跟的话 就是上一次add 里面的全部撤销了
git reset HEAD XXX/XXX/XXX.java 就是对某个文件进行撤销了

分支

查看本地分支

git branch

查看所有分支(本地加远程)

git branch -a

创建分支

git branch <branch-name> # 例: git branch develop

切换(检出)分支

git checkout <branch-name> # 例: git checkout develop

创建并切换到新建分支

git checkout -b <branch-name> # 例:git checkout -b develop

提交本地分支到远程分支

git push origin branch_name
git push origin branch_name:master


撤回

不小心commit了一个不应该commit的修改,但是还没有push,想撤销那个commit

git log
git reset --hard commit_id

git reflog 时光穿梭机

来自此处
场景如下:

1.commit的信息很简单,就是做了6个功能,每个功能对应一个commit的提交,分别是feature-1 到 feature-6;  
2.小白回滚到了feature-1上,并且回滚的时候加了--hard,导致之前feature-2 到 feature-6的所有代码全部弄丢了;  
3.现在feature-2 到 feature-6的代码没了;
4.小白还在这个基础上新添加了一个commit提交,信息叫feature-7;
5.现在feature-2 到 feature-6全没了,还多了一个feature-7;
6.如何把丢失的代码feature-2 到 feature-6全部恢复回来,并且feature-7的代码也要保留;

只需掌握了git reflog和git cherry-pick
git reflog
展示出所有你之前git操作,你以前所有的操作都被git记录了下来
这时候要记好两个值:4c97ff3和cd52afc,
他们分别是feature-7和feature-6的hash码。
然后执行回滚,回到feature-6上:
git reset --hard cd52afc
现在我们回到了feature-6,
但是feature-7没了,如何加上来呢?
这个时候就用上了git cherry-pick,
刚刚我们知道了feature-7的hash码为4c97ff3,操作如下:
git cherry-pick 4c97ff3
输入好了以后,你的feature-7的代码就回来了。
期间可能会有一些冲突,按照提示解决就好。
feature-1 到 feature-7的代码就合并到了一起,以前的代码也都回来了。


提交代码

git commit -m <comment> # 例:git commit -m "修复了issue-1:错别字"

合并

切换到master主干并将develop分支的代码合并过来

git checkout master
git merge <branch-name> # 例:git merge develop


从历史的提交建立新分支的方法:
方法一: checkout到历史提交,然后checkout -b。
方法二: reset到历史提交,checkout -b,然后再reset到原来的版本。
方法三: git branch

将某个历史版本全部拉到工作区和暂存区:
方法一: 可能的需求是为了将过去删除掉的修改重新应用到最新的版本,这时可以先回到历史版本处建立分支,然后回到原来的最新的版本,进行merge分支的操作。
方法二: reset加上hard参数到需要的历史版本,然后再reset加上soft参数回来。

将历史版本的某文件版本拉到当前工作区或者暂存区进行处理:
方法一: git reset HEAD~2 foo.py,直接拉到暂存区。
方法二: git checkout HEAD~2 foo.py,拉到工作区和暂存区。

已经有添加到暂存区的文件修改,之后又进行了修改。想要都撤销掉,变为和仓库中的版本相同(仓库覆盖工作和暂存):
方法一:1、git reset HEAD file 清空暂存区的提交,变为和仓库中的版本相同。2、git checkout -- file 以暂存区为蓝本,覆盖掉工作区。
方法二:git checkout HEAD -- file 。

已经添加到暂存区的修改之后又进行了修改,想要都撤销掉,变为和仓库中的版本相同(仓库覆盖工作和暂存):
方法一:git reset --hard HEAD 重设HEAD,hard参数覆盖工作区和暂存区。
方法二:强制切换到其他分支丢弃更改,然后再切回来。

撤销当前工作区的文件修改,变为和暂存区相同(暂存覆盖工作):
方法一:git checkout -- file 暂存区覆盖工作区(以暂存区为蓝本,覆盖掉工作区)。

撤销添加到暂存区的文件修改,将修改退回到工作区(暂存先覆盖工作,然后仓库覆盖暂存):
方法一:1、git checkout -- file 以暂存区为蓝本,覆盖掉工作区。 2、git reset HEAD file 清空暂存区的提交,变为和仓库中的版本相同。

清空暂存区文件修改:
方法一:git reset -- file 清空暂存区的文件修改。

清空暂存区:
方法一:git reset HEAD file 清空暂存区。

checkout文件层面的操作:
主要对暂存区和工作区起作用,一般有暂存区覆盖工作区的行为特征。

reset文件层面的操作:
主要对暂存区起作用。

简单对比git pull和git pull --rebase的使用

git常用指令
git 问题汇总
同时把代码提交到两个git代码托管的服务器上

git commit -m 提交的内容换行
网上说只需要通过单引号来换行,一直没理解,后面终于试出来了。总结一句话就是。 。

先输入第一个引号,按Enter即可换行,完成后再补齐后面的引号
// 步骤一: 输入第一行
git commit -m "1. 第一行

// 步骤二: 按Enter 输入第二行
git commit -m "1. 第一行

第二行
// 步骤三: 输入完毕,补齐引号,提交!
git commit -m "1. 第一行

第二行"

git 放弃本地某个文件的修改,或所有修改

1.git checkout
git checkout 文件名
git checkout // 放弃所有文件的所有修改
2.git reset
git reset --hard 版本号 // 返回到某个版本,放弃所有修改
有一种恢复会保留修改记录,有一种不会保留修改记录,请翻阅资料文档

远程分支 A 改名为B了,本地(git branch -a )没找到
解决方法:
git fetch origin B #更新
git branch -a #查看所有分支

多人合作最优选择Gitlab flow
或者下面的流程

多人合作开发使用git(简单版)

A新开一个分支a
B新开一个分支b
主分支为master
A开发的代码提交到远程a分支上(git push origin a)
然后切换master主分支上(git checkout master),拉远程master分支是否有更新(git pull origin master)
然后合并本地分支a最新代码(git merge a),在提交到远程master分支上(git push origin master)
然后切换分支a上(git checkout a),合并最新master分支上的代码到分支a上(git merge master)
最后继续写代码或者直接更新最新代码到远程分支a上(git push origin a)

B操作同理

多人开发Git(繁琐版)

情况如下:
1.线上突然出现一个紧急的bug,需要紧急处理,但不影响本地正在进行的开发;
2.只修bug;
3.新功能开发。

场景:线上的某个模块有bug,要求撤回,更换到上个版本,但不影响这个版本新加的功能(A->B->M)
做法:本地根据情况(功能,bug)新建分支,不要在一个分支上开发: 本地会有bugA,bugB, fix, dev, test等
处理:(A->B->M)线上模版X出现bugB,但此版本已有新功能M,master不能直接撤回上个版本A,

 本地模块X分支从B撤回上个版本A,合并新功能M的更新,提交。

疑问:模块X分支上要不要git pull?

1.本地新建 test 分支 并拉取远程 test 分支
git checkout -b test origin/test
PS: 【拉取远程是指在这个时刻以远程的更新为主,在此基础上开发,备用,正常状态不会动这个分支】

2.新建 bug 分支
git branch bug
PS:【根据需求,会有N 多 个bug 分支,或开发分支】

3.切换到 bug 分支上
git checkout bug

以上2.3步骤可以一个命令:
新建并切换这个 bug 新分支
git checkout -b bug

4.在新分支上合并 test 分支
git merge test
PS:【新建分支后这个新分支没用任何东西,需要将最新的(根据情况)分支合并到这个新分支上,在此基础上开发、修改】

以上步骤都是在新分支上进行:
bug 分支合并 test 主分支后,
就是说在 test 主分支的基础上开发、修 bug,但不动 test 分支
开发完后再切换到 test 主分支上

5.切换到 test 主分支
git checkout test

切到 test 主分支后
此时的 test 分支还是上一次git pull 的状态
并没有合并bug 分支的更新,同时可能比远程的 test 分支版本还要低
所以需要进行下一步拉取远程 test 主分支更新

6.拉取远程 test 主分支
git pull origin test

拉取远程分支

git checkout -b 本地分支 origin/远程分支

在拉取远程 test 主分支前,
本地此时的 test 主分支还是上个版本,
本地的 test 分支也没改动过,合并远程 test 主分支后是没问题的。
进行下一步合并本地开发 bug 分支,
一般出现冲突是在这一步【git merge bug】

7.在此分支合并其他分支,例如test 分支上合并 bug 分支
git merge bug

合并本地bug分支前,此时的 test 分支是远程最新的[PS:在上一步已经拉取远程 test 主分支的 更新]
此时的 本地 test 主分支在与本地 bug 分支合并[git merge bug]过程中可能会出现冲突

解决后,将本地 test 分支的更新提交到远程 test 分支上

8.提交到远程 test 主分支
git push origin test

提交后,再次回到开始,循环以上。

几个有用的命令:

1.获取某一个分支的单笔提交,并作为一个新的提交引入到你当前分支上。 当我们需要在本地合入其他分支的提交时,如果我们不想对整个分支进行合并,而是只想将某一次提交合入到本地当前分支上,那么就要使用git cherry-pick了。
git cherry-pick deeb74302f0e44

2.从撤回一次历史的提交,git revert 命令的好处就是不会丢掉别人的提交,即使你撤销后覆盖了别人的提交,他更新代码后,可以在本地用 reset 向前回滚,找到自己的代码,然后拉一下分支,再回来合并上去就可以找回被你覆盖的提交了。
git revert deeb74302f0e44

[Git高级教程(二)] 远程仓库版本回退方法
[Git] Git整理(五) git cherry-pick的使用

git使用情景1:正在写代码,突然线上出现了bug

方式2:拉一个新分支,老司机都推荐这样做,充分利用了git特性
先暂存一下工作空间改动:
git stash
还原暂存工作空间的改动:
git stash pop

新建一个分支,并且换到这个新分支
git branch fix_bug //新建分支
git checkout fix_bug //切换分支

这时候就可以安心的在这个fix_bug分支改bug了,改完之后:
git add .
git commit -m "fix a bug"

切换到master主分支
git checkout master

从fix_bug合并到master分支
git merge fix_bug

提交代码
git push

然后从暂存区恢复代码
git stash pop

此时如有冲突,需要解决冲突
哈哈,工作空间又恢复到了原状

其他

执行Git命令时出现各种 SSL certificate problem 的解决办法

git config --global http.sslVerify false

建议用 git check-ignore 来检查下是哪个规则导致的
Window 上如何删除git的账户
控制面板用户帐户凭据管理器 ,选Windows凭据,看到普通凭据
git log退出方法:英文状态下按Q

git强制覆盖:

    git fetch --all
    git reset --hard origin/master
    git pull

git强制覆盖本地命令(单条执行):

    git fetch --all && git reset --hard origin/master && git pull

git强制覆盖单个文件或目录filename

git log

获取commit ID:cc8990b

git checkout -m cc8990b <filename>

例如:

git log
获取commit ID:430c63aba0f2812d
git checkout 430c63aba0f2812d src/views/xxx/Home.vue


如何移除 git 提交历史中关于某个文件的修改历史?

场景是这样的,在一次提交 PR 的 review 过程中,我提交的一个文件,在若干 commits 的修改下,最终和最初状态完全相同,但是 PR 中却保留了对该文件的提交历史,因此 reviewer 希望我可以将这个文件移除提交历史。

这个主要需要用到 git rebase ,步骤如下:

git log filename: 首先通过 git log 来查询要回滚到的 commit id
git reset commit-id filename: 对该文件进行 reset 操作(撤销提交历史相关的修改)
git checkout filename: 对其进行 checkout 操作(撤销对文件本身的修改)
git commit --amend: 修改提交历史信息
git rebase --continue/git push: 同步

我的提交信息规范

aliyun code

https://code.aliyun.com/help/ssh/README 生成Ssh
https://code.aliyun.com/profile PC上无法验证显示“页面不存在(404)”, 手机上可以。
https://code.aliyun.com/profile/password/edit 如果没有设置code账号(区别登录账号)密码,先验证邮箱才可以更改密码
阿里云window下ssh 错误
Aliyun关于用户的新规则

GitHub

github的表情
GitHub Actions 操作

PR

例如A本地:
git init
操作 n 次 commits ...

git:
A新建一个aaa 仓库

把本地提交到远程 aaa,需要把本地的git 指向 远程
git remote add origin git@github.com/xxx/aaa.git
git push origin master


第三方B fork A 的 aaa
B:git clone git@github.com/bbb/aaa.git

B: 开发新功能,新建分支ccc
git checkout -b ccc
edit,commit ...

提交到 B 的 远程
git push origin ccc

B在A 的仓库发起PR

但此时原作者已经修改多次
原作者需要做新建分支bbb 同步B的代码 ,合并B的ccc
git remote add bbb git@github.com:bbb/aaa.git
git fetch bbb
得到 bbb/ccc
然后A新建测试分支newA
git checkout -b newA
git merge bbb/ccc


测试完成后,A合并到master
git cehckout master
git merge newA
测试没用后,A删除newA
git bran -D newA

A原作者,合并代码提交
git push origin master

完成一次PR
B 可以删除之前的分支ccc
git branch -D ccc
删除远程的ccc
git push origin :ccc


之后bbb  把原作者的代码添加到自己这边来
git remote add upstream git@github.com:A/aaa.git
git checkout master 
git pull upstream master


五步git操作搞定Github中fork的项目与原作者同步

https://blog.csdn.net/zwhlxl/article/details/45110587

命令如下:

git clone xxx-fork.git

git remote add xxx xxx.git

git fetch xxx

git merge xxx/master

git push origin master