目录
就是篇Github的个人笔记。以防自己以后忘记。
场景:多人协作,需要互相push。
一.克隆对方仓库
在对方的repo中找到需要的repo,点击fork。这时候,在自己的仓库内会有一个fork的repo。
In the terminal, go to the folder where you want to put the local repository using cd
git clone https://github.com/username/repo_name.git
二.与仓库建立连接
git remote -v
检查本地的repo与哪个远程repo建立了连接。如果只是按照上图进行操作,则只会与自己的fork建立连接。
所以我们需要添加最开始fork来的仓库的连接。
git remote add upstream https://github.com/other_people_username/repo_name.git
这样就完成了连接的建立。
三.创建自己的分支
最开始是只有master branch的。如果需要,可以自己新建branch。
git checkout -b newbranch #新建branch,并且进入到new branch
git checkout master #切换回到master
git merge newbranch #这里是分支名字,将new branch内容合并到master branch
git branch -d newbranch #当前分支已经没用了,记得删除,除非还需要用到
git branch #查看当前所在分支
git branch -A/--all #查看所有分支
四.修改本地代码后提交
相当于让机器保存记录每一个你写的版本。方便之后回滚。
git status #查看工作区代码相对于暂存区的差别
git add . #默认为将修改操作的文件和未跟踪新添加的文件添加到git系统的暂存区,不包括删除
git add -u #表示将已跟踪文件中的修改和删除的文件添加到暂存区,不包括新增加的文件
git add -A #所有的已跟踪的文件的修改与删除和新增的未跟踪的文件都添加到暂存区
git commit -m "message" #提交到本地保存,message是必须的,单行注释
git commit -m ' #注释比较长,需要多行,使用单引号标识
第一行
第二行
'
在使用git commit命令将修改从暂存区提交到本地版本库后,剩下需要将本地版本库的分支推送到远程服务器上对应的分支。
git push的一般形式为 git push <远程主机名> <本地分支名> <远程分支名>
git push origin master
如果远程分支被省略,如上则表示将本地分支推送到与之存在追踪关系的远程分支(通常两者同名),如果该远程分支不存在,则会被新建
git push origin :refs/for/master
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,等同于 git push origin –delete master
git push origin
如果当前分支与远程分支存在追踪关系,则本地分支和远程分支都可以省略,将当前分支推送到origin主机的对应分支
git push
如果当前分支只有一个远程分支,那么主机名都可以省略,形如 git push,可以使用git branch -r ,查看远程的分支名
这时候在你自己的远端repo中,应该能发现更新的代码了。
如果没发现新代码的同学先不要慌,看看自己是不是没有push对branch。返回到上一步检查自己本机目前在哪一个branch。
五.请求合并
在自己的远端repo上点击New Pull Request。这样会进入到一个比较两个repo代码的界面。如果没有自动出现,就点击Comparing changes按钮。
这时候,是你想要把你的代码push到别人的repo进行更新。所以base repo是别人的,head repo是自己的。记住别选错了。如果是别人更新了代码,想要把新代码复制到自己的repo中,就把这两个换一下。我们先继续讲前一种情况。
上图展示的情况是两个repo中已经没有差别了。如果你更新了代码,应该会看见绿色的able to merge。然后填写请求标题和信息,点击create pull request。你的工作就已经完成了。剩下的,是等待你的合作者同意你的和并请求。如果你和其他人同时写一个file的代码,可能会出现冲突的情况(没有able to merge),稍微复杂一些,需要手动标识之后再merge。
正常情况下应该是到此就大功告成啦!但是,人人都会有犯错的时候。
六.错误回滚和删除文件
查看之前版本,决定回退到某一个版本。
git log #查看版本
git reset --hard <commit_id> #回退到指定版本
git push origin HEAD --force #清空这个commitid之后所有已经提交了的commit
git revert <commit-id> #剔除某次提交,其后的commit不受到影响
操作:
如果要删除的这次commit属于merge分支产生的commit,那么这个commitId会有两个父commitId分属于merge前的两个分支的两次提交。如图:
此时输入
git revert aacd8c89 -m 1
就删除了aacd8c89这次提交,并将主线设置到了798a4415这次提交上,然后解决完冲突push上去就行了。
如果输入
git revert aacd8c89 -m 2
就会将主线设置到8bd22080这次提交上,然后解决完冲突push上去就行了。
参考资料: