Git同步上游并保留自己本地的修改
Git同步上游并保留自己本地的修改
前言
最近在折腾GitHub一些开源的项目,但是开源的达不到我想要的效果,于是就自己魔改,那就肯定得同步上游,并且保留自己的改动.
克隆仓库
git clone https://github.com/org/rep.git
这里我插一腿,有托管的记得改remote url
添加upstream
git remote add -t master -m master upstream 'https://github.com/org/rep.git'
这个命令多几个参数是因为我那个项目分支太多,而我只需要master
分支
git remote add upstream 'https://github.com/org/rep.git'
一般来说都是用的上面这个命令
同步上游
git fetch upstream
合并上游
两种方式
git merge --squash upstream/master
有--squash
就合并成一个commit,没有的话上游几个就几个
这个没什么好说,你用git pull的时候就是git fetch + git merge
git cherry-pick -n A^..B
: [A,B]的commit 全合并过来 (包含A B)
git cherry-pick -n A..B
: (A,B]的commit 全合并过来 (不包含A 但包含B)
这个有必要说一下, 上面这条命令就是多条commit合并,这里我初学的时候犯了一个错误
error: empty commit set passed
查了半天,原来是AB顺序错了
AB正确顺序: 提交commitA的时间一定要比B早
, 图片只是举例子
git cherry-pick commitA commitB
要commit的sha
前6
位就行了,没必要全部
单条 或者 选择多条不同的commit的话,用上面这个
提交
git push origin master
git merge
带了--squash
参数就得自己先写了git commit -m 'commit'
在push
git cherry-pick
带了-n
参数的话也得自己先写commit
后话
提交的话,我个人是比较偏向HTTPS的,比较方便,SSH的还得生成key在导入到托管平台.
以GitHub举例, 现在已经停止了password验证,得用access token
GitHub access token用法
申请链接: https://github.com/settings/tokens
一般选这两个 repo
和 workflow
Expiration
是有效期,自己定
git push之类的话, access token
就是你的credential
密码
或者把remote url
改成https://accesstoken@github.com/org/repo.git
这种形式