Git

撤销merge操作

方法一,reset 到 merge 前的版本,然后再重做接下来的操作,要求每个合作者都晓得怎么将本地的 HEAD 都回滚回去:

$ git checkout 【行merge操作时所在的分支】
$ git reset --merge
$ // git reset --hard 【merge前的版本号】

方法二,当 merge 以后还有别的操作和改动时,git 正好也有办法能撤销 merge,用 git revert

$ git revert -m 【要撤销的那条merge线的编号,从1开始计算(怎么看哪条线是几啊?)】 【merge前的版本号】
Finished one revert.
[master 88edd6d] Revert "Merge branch 'jk/post-checkout'"
1 files changed, 0 insertions(+), 2 deletions(-)

这样会创建新的 commit 来抵消对应的 merge 操作,而且以后 git merge 【那个编号所代表的分支】 会提示:

Already up-to-date.

因为使用方法二会让 git 误以为这个分支的东西都是咱们不想要的。

方法三,怎么撤销方法二:

$ git revert 【方法二撤销merge时提交的commit的版本号,这里是88edd6d】
Finished one revert.
[master 268e243] Revert "Revert "Merge branch 'jk/post-checkout'""
1 files changed, 2 insertions(+), 0 deletions(-)

这样就行了,可以正常 merge 了,不过可能会有很多冲突:

$ git merge jk/post-checkout
Auto-merging test.txt
Merge made by recursive.
test.txt | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)

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 的项目如何与原项目同步更新?

方法一:(最简单的方法)

方法二:让原项目的作者把你加入该项目的成员,即可对该项目进行各种骚操作(废话。。)

方法三:

  • 首先 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 RequestNew Pull Request,下拉框里将原项目->自己的项目,点击 compare across forks,按照提示一通操作完成后,点击绿色的Merge Pull Request,OK了)
  • 这时候在本地,切换到 master 分支,执行 git pull,将这些修改同步下来
  • 切换到 branchname 分支,执行 git merge master -m msg ,将这些修改合并到自己的开发项目中,ok,开心了不?
  • 大功告成!

扩展:如何把自己对项目的改动,提交到 fork 的那个原项目呢?

  在你 fork 的项目页面上,有一个按钮叫 Pull Request,点了它就会把你的修改发送到对方的项目里,最终由原项目主人决定是否接受你的修改~