Git
Git
撤销merge操作
方法一,reset 到 merge 前的版本,然后再重做接下来的操作,要求每个合作者都晓得怎么将本地的 HEAD 都回滚回去:
$ git checkout 【行merge操作时所在的分支】 |
方法二,当 merge 以后还有别的操作和改动时,git 正好也有办法能撤销 merge,用 git revert:
$ git revert -m 【要撤销的那条merge线的编号,从1开始计算(怎么看哪条线是几啊?)】 【merge前的版本号】 |
这样会创建新的 commit 来抵消对应的 merge 操作,而且以后 git merge 【那个编号所代表的分支】 会提示:
Already up-to-date. |
因为使用方法二会让 git 误以为这个分支的东西都是咱们不想要的。
方法三,怎么撤销方法二:
$ git revert 【方法二撤销merge时提交的commit的版本号,这里是88edd6d】 |
这样就行了,可以正常 merge 了,不过可能会有很多冲突:
$ git merge jk/post-checkout |
HEAD detached from XXXX解决方法
这是由于指针指向了其中的一次提交,checkout到分支即可。
远程关联及删除
Git 创建本地分支以及切换到本地分支
// test 是分支名称
git checkout -b test |
创建远程分支,名称我设置为和本地一样,当然可以随便设置
git push origin test:test |
进行分支关联
git branch --set-upstream-to=origin/test test |
删除远程分支
git push origin -d test |
删除本地分支 注意删除时候要切换到其他分支
git branch -d test |
把别人的项目修改后,提交到自己的 github,并同步更新
如果你在 github 上 clone 了别人的项目,在本地做了一些修改后,直接git push肯定会遇到问题。因为你提交的远程仓库是别人的仓库。
如何把 clone 后修改的代码提交到自己的 github 上呢?
方法一:
- 修改
.git/config
这个文件,把url
换成自己新建的仓库地址
方法二:
- 先 fork 别人的代码,在你的 github 上就出现了同名的项目,这个项目就属于你自己了,然后把这个项目
git clone
到本地,改改改,然后git push
即可
你 fork 了别人的项目之后,他更新了代码,你 fork 的项目如何与原项目同步更新?
方法一:(最简单的方法)
远程仓库执行
fork
操作,得到自己的url
git clone url
到本地配置远程分支:
git remote add upstream [fork项目的地址]
运行
git remote -v
,会出现:origin https://gitee.com/phpzhi/testPro.git (fetch)
origin https://gitee.com/phpzhi/testPro.git (push)
upstream https://gitee.com/opan/testPro.git (fetch)
upstream https://gitee.com/opan/testPro.git (push)执行
git fetch upstream
拉取远程仓库的代码合并拉取的代码
git merge upstream/master
上传
git push
方法二:让原项目的作者把你加入该项目的成员,即可对该项目进行各种骚操作(废话。。)
方法三:
- 首先
git clone
原项目到本地 - 在 github 上
fork
该项目,这时有了自己的仓库地址url
- 执行
git remote add name url
,name 是你的仓库别名,可以随便改,但不要跟已有的冲突 - 最后,通过
git fetch origin
来获取原项目的最新代码 git merge -m <msg>
大功告成!
(这里如果产生了冲突,就手动解决,完了之后执行git add .
和git commit -m msg
,最后git push name
方法四:通过创建新的分支,进行合并操作(操作有点多)
fork
原项目到自己的 git 上,拥有了自己url
- 执行
git clone url
- 创建分支,
git branch branchname
- 切换分支,
git checkout branchname
- 随便修修改改,以后就在这个分支开发了,写完代码后,将修改提交到自己的 git 上,第1次推送的时候会有提示
git push --set-upstream origin branchname
,照着打就行 - 当原项目有更新后,我们可以找到,在码云项目名称(
forked from xxx / xxx
)后面那里有一个强制拉取代码
按钮。我们先切换到master
分支,再点它,就会同步原项目的修改,放心,你的分支内容不会受到影响。
(至于 github 的,点击Pull Request
,New Pull Request
,下拉框里将原项目->自己的项目
,点击compare across forks
,按照提示一通操作完成后,点击绿色的Merge Pull Request
,OK了) - 这时候在本地,切换到
master
分支,执行git pull
,将这些修改同步下来 - 切换到
branchname
分支,执行git merge master -m msg
,将这些修改合并到自己的开发项目中,ok,开心了不? - 大功告成!
扩展:如何把自己对项目的改动,提交到 fork 的那个原项目呢?
在你 fork 的项目页面上,有一个按钮叫 Pull Request
,点了它就会把你的修改发送到对方的项目里,最终由原项目主人决定是否接受你的修改~