Git 回滚合并


假设有如下分支图:
unmerge1.png

注:Git 分支图中的箭头表示依赖关系,并不是分支发展路线。发展路线和箭头是相反的。也就是图中是从C1开始一直发展到C12的。

假设要回滚C10。

第一种解决方案是将 master 回退到C8,然后将两个特性分支 jk/post-checkout 和 db/push-cleanup 合并过来。

git checkout master
git reset --hard [sha_of_C8]
git merge jk/post-checkout
git merge db/push-cleanup

完成之后,分支图如下:
unmerge2.png



阅读全文

Git 的 ssh key


生成 ssh key

ssh-keygen -t rsa -C "your name"

这样默认会在本地的 ~/.ssh 目录下生成 id_rsa,id_rsa.pub 两个文件。
id_rsa 是私钥,id_rsa.pub 是公钥。

使用 ssh key
ssh key 方式登录远程服务器
我们需要把 id_rsa.pub 拷贝到远程服务器的 ~/.ssh 下面,并改名为 authorized_keys,这样我们就可以使用 key 的方式登录了。

ssh key 方式使用 git clone 代码
如果我们使用的是 github,只需要把 id_rsa.pub 的内容拷贝出来,在 github 的 setting 里面添加即可, 我们就可以使用 ssh 方式 clone 代码了。

// 请修改为你自己的git地址
git clone git@github.70data/test.git




阅读全文

Git 撤销修改


在 Git 里共有5种状态:
未修改(Origin)
已修改(Modified)
已暂存(Staged)
已提交(Committed)
已推送(Pushed)

已修改,未暂存
如果我们只是在编辑器里修改了文件,但还没有执行 git add .,这时候我们的文件还在工作区,并没有进入暂存区,我们可以用:

git checkout .

或者

git reset --hard

来进行撤销操作。







阅读全文

Git Rebase


分支合并,有两个选择,一个是 merge,另一个是 rebase。

  1. merge 和 rebase 合并后的结果是一模一样的,形象的说,二者是殊途同归。
  2. 使用 rebase 后的 commit 与之前的 commit,它们的 SHA-1 值不同,Git 会把它们看成两次提交。

现在社区中推荐的主流 Git 合作方法,也是利用 Rebase 命令,即 Fork 一个代码库后,保留一个 remote 分支用来跟近主库进度,另开一个 feature 分支来打 patch,当 patch 打好后,在本地同步一下 remote 分支上的代码,保持与主库一致,如果在你打 patch 这段时间,主库发生了变化,那么你就需要在本地预先做一次 rebase 操作,以保证你的改动是构建在主库最新代码之上的。这其实相当与你帮助作者在本地处理好了冲突,这样作者再合并你的代码时候,也就能比较轻松了。换个角度,其实使用
rebase 这个过程也是一个自我检查的过程,可以强制你对改动进行 Review,从而减轻贡献者和所有者之间的工作量。因为没有人比你更熟悉你的代码。

git pull —rebase,这个命令在实际使用中的出场率还是很高的。
我们先从 git pull 说起,git pull 完整的应该是 git fetch + git merge FETCH_HEAD,默认时候 git pull 会先拉取代码,再进行 merge,上面说了使用 merge 会多出一条合并的 commit 以及一条分支线来,如果 commit 和 merge 频繁的话,可能会出现下图这样的情况,但是 rebase 则不同,其会保持线性,这样提交记录看起来就会整洁许多,使用 —rebase 就是这个意思用 git rebase 取代。
git-rebase-1.png

阅读全文

Git 删除分支


查看已有的本地及远程分支:

git branch -a

删除远程分支:

git push origin --delete Su-modify

删除后,可再次查看分支情况:

git branch -a

删除本地分支:

git branch -d Su-modify

若分支有修改还未合并,会提示你还没合并。
强行删除本地分支:

git branch -D Su-modify
阅读全文

github fork 同步源的更新


首先要先确定一下是否建立了主 repo 的远程源:

git remote -v

如果里面只能看到你自己的两个源(fetch 和 push),那就需要添加主 repo 的源:

git remote add upstream URL
git remote -v

然后你就能看到 upstream 了。

如果想与主 repo 合并:

git fetch upstream
git merge upstream/master
阅读全文

Git 放弃本地修改 直接 pull 代码


git reset --hard HEAD    
git clean -f -d    
git pull

先 reset 然后清空
同时可以解决如下问题:

error: Your local changes to the following files would be overwritten by merge:
        test/main.go
Please, commit your changes or stash them before you can merge.
阅读全文