竟然是命令操作,当然少不了要使用Shell.
这里推荐Windows下使用babun用来执行shell命令,下载地址:http://babun.github.io/
MAC 请路过.
1:拉取项目
git clone https://github.com/angcyo/PaintDemo.git
如果这是一个维护很多年的项目, 那么git clone
会拉取很多代码,
此时可以使用--depth=1
参数, 表示只拉取最后一次代码深度.
git clone --depth=1 https://github.com/angcyo/PaintDemo.git
2:查看状态
可以查看所有文件的修改状态,在进行commit操作,push操作,pull操作之前,请确保所有文件的状态都是干净的,否则会出现意想不到的错误
git status
git add build.gradle //追踪build.gradle文件
git add . //追踪所有文件,注意垃圾文件要checkout哦~
git checkout build.gradle //放弃追踪build.gradle文件
git checkout . //放弃追踪所有文件
3:提交修改
git commit -m "基本修改" //提交本次修改
git status //在执行操作之前,都请先查询状态,这个习惯很好
提交之后,可以使用:
git log //查看提交日记
但是,本次提交,只是提交到了本地仓库,远程仓库并没有修改.
所以接下来,我们需要把修改提交到远程仓库.
4:推送到远程仓库
git push origin master //推送到远程仓库,我这里用的Github,所以会提示输入用户和密码.(输入不可见哦)
这个命令其实是和
git push origin master:master //等效的
git push origin :master //可以删除远程的master分支
很显然,推送已经生效了.
5:查看所有分支(本地分支和远程分支)
git branch //可以显示本地所有分支
git branch -a //可以显示所有分支,包括远程的.
6:创建分支, 切换分支
git branch d82 //用当前的分支创建新的分支d82,并切换到d82分支
git checkout -b d82 //用当前的分支创建新的分支d82,并切换到d82分支
git checkout d82 //切换到 d82 分支
git checkout -b d82 origin/d8 //使用origin/d8分支, 创建本地新的d82分支
7:删除分支
git branch -d 0308 //删除分支0308
8:推送到远程指定分支
git push origin master:2016-08-13//将本地master分支,推送到远程2016-08-13分支,不存在则会创建.
9:删除远程分支
git push origin :2016-08-13//删除远程2016-08-13分支
上述,都是基本的操作,但是实际过程当中往往没有那么顺利.
接下来,针对问题,描述使用方法.
1:取消上一次的commit
当执行
git commit -m “提交信息”
之后,发现不对,有问题,需要回退本次提交.
我们可以通过git log命令,查看commit id信息,然后通过以下命令,就可以轻松愉快的回退到先前的状态了
git reset --soft 47e39134a0eb6b1698cccf950621c6c631ea5879
这种方法,不仅可以回退,而且可以恢复状态.
如果你仅仅想回退,不想要状态,可以这样:
git reset --hard 47e39134a0eb6b1698cccf950621c6c631ea5879
2:合并其他分支的代码
当其他同事,在同一分支修改代码之后,此时要更新自己的分支.
git rebase 31a55ce
我们可以先通过git fetch命令,查看最新的代码版本,最重要的就是要拿到最新代码的commit id.
再通过git rebase ‘commit id’,就可以用最新的代码合并本地的代码.
当然,更简单粗暴的方法是:
git pull //这种方法,很粗暴,通常会遇到很多问题,推荐使用git rebase命令
3:创建分支,备份代码
很多时候,我们并不需要立即提交代码,或者各种原因.总之目的就是备份代码;
git checkout -b "angcyo" origin/d8 //用远程的d8分支,创建一个新的分支angcyo,相当于备份了远程的d8分支,为angcyo分支
git checkout -b "angcyo" //用当前分支,创建一个新的分支angcyo
分支多了之后,肯定需要切换分支的:
git checkout "分支名" //切换分支
4:合并多个提交
如果我已经执行了一次git commit 操作, 此时我又新增了文件,或者修改了文件.
这个时候,我怎么把这次修改,合并到上一次的commit中呢?
git add . //需要先追踪修改过的文件
git commit --amend //然后执行 此命令,就行了
这样的话,本次修改就会和上一次的修改,合并了.
5:绝招都是留在最后的
什么是commit id
git log //使用此命令,可以查看所有的commit信息,信息里面就包含了commit id,如下图.
Git的强大,就是把你每次commit提交到的操作,都记录在这个id里面,
所以你上一次的提交,和你上上一次的提交,是没有任何关系的.
比如:
commit id :d5264131 记录了新增2个文件,a.java和b.java
commit id :d8911234 记录了修改2个文件,c.java和d.java
那么你可以在任何分支,引用这个commit id,就会执行相对应的操作.
git cherry-pick [commit-id] //本篇的主角.
git cherry-pick d5264131 //会在当前分支: 新增2个文件,a.java和b.java
git cherry-pick d8911234 //会在当前分支: 修改2个文件,c.java和d.java
这个神奇的命令,告诉你,你只要知道commit id,就可以将你的修改,用在任何地方.
妈妈再也不用担心,修改了文件却不知道怎么应用到其他分支了.
文章中的很多命令,并没有做过多的详细解释.
读者可以百度一下命令,会比我复制粘贴过来更有效.
2019-01-15 更新
git clone xxx.git //拉取工程
拉取代码步骤
# 1.获取工程最新代码
git fetch
# 2.合并最新代码到本地分支
git rebase origin/master //本地合并远程的master分支,
# 1 2 命令等价于
git pull origin master
git rebase 出现冲突, 可以使用 git rebase --abort 终止此次合并.
git pull 出现冲突, 可以使用 git merge --abort 终止此次合并.
提交代码步骤
# 1. 添加文件到git管理
git add . //添加所有改动文件
git add xxx.java //添加指定文件
# 2. 提交改变到git仓库
git commit -m "add new file" //提交已add的改动
git commit -a -m "add all new file " //提交所有的改动
# 3. 推送到远程仓库
git push origin master //本地分支master的所有改动,推送到远程分支master, 等价于命令 git push origin master:master
git push origin master:new_master //本地分支master, 推送到远程分支 new_master, 远程分支不存在, 则会创建新分支.
git push origin :new_master //删除远程分支new_master
关于合并代码时, 遇到冲突的解决
, 请务必入群, 手把手教你解决.
2019-5-10 更新
多仓库地址管理
通常情况下, 本地仓库
都至少会关联一个远程仓库地址
关联命令是git remote add 代号 https://xxx.github.com/xxx
可以通过 git remote -v
命令, 查看本地仓库关联了多少个远程仓库
所以, 关联多仓库
的方法也很简单:
关联多仓库地址
git remote add 代号1 地址1 //关联地址1
git remote add 代号2 地址2 //关联地址2
git remote add 代号3 地址3 //关联地址3
这里的代号
, 将会在之后的命令中使用到,类似于ip地址与域名的关系
.
拉取多仓库代码
因为有多地址的存在, 所以拉取代码的时候, 需要指定具体的仓库
才行
git fetch 代号1 //拉取代号1 , 对应的 仓库地址源码
git fetch 代号2
git fetch 代号3
git merge 代号1 //合并代号1 , 对应的 仓库地址源码
git merge 代号2
git merge 代号3
git rebase 代号1/分支1 //rebase 代号1 分支1 的源码
git rebase 代号1/分支2
git rebase 代号2/分支1
git rebase 代号2/分支2 //rebase 代号2 分支2 的源码
提交多仓库代码
提交代码的时候, 也需要指定仓库
push
的命令, 请参考本文的 8:推送到远程指定分支
git push 代号1 本地分支名/远程分支名
//将本地分支1的代码, 提交到 代号2 对应的远程仓库地址的分支2 上. 如果远程分支2不存在, 则会创建
git push 代号2 本地分支1/远程分支2
后续补充…
群内有各(pian)种(ni)各(jin)样(qun)
的大佬,等你来撩.
联系作者
请使用QQ扫码加群, 小伙伴们都在等着你哦!
关注我的公众号, 每天都能一起玩耍哦!