git基础
git clone xxx.git 克隆
git pull origin master
git push origin master
git tag 查看tag分支
分支
git branch -a 查看所有的分支
git branch -r 查看远程所有分支
git checkout -b dev 创建dev分支,并切换到dev分支 等同于
git checkout -b dev remotebrance 创建dev分支,并追踪远程分支,并切换到该分支
git branch dev
git checkout dev
git checkout master 切换到master分支
git merge
git branch -d dev 本地删除分支
git push origin :dev 在github远程端删除一个分支: (分支名前的冒号代表删除)
git push origin dev 将新分支发布在github上
git branch newbranch remotebrance 创建新分支,并将其与后面的分支关联 ,另一种方法是
git branch –set-upstream local-dev remote-dev
撤销git add:
git reset HEAD -filename
git rm –cached name
git reset .
本地清空修改
git clean -fd
本地回滚:
git reset –hard HEAD
git reset –hard bc4ebabd6d14502351f8f8cfb246bcb07099b1aa
git服务器版本回滚
git revert HEAD 撤销前一次 commit
git revert HEAD^ 撤销前前一次 commit
git revert commit (比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
以上都是产生新的commit,并不是版本回滚,若版本回滚,采用本地回滚+强制推上服务器的
git reset –hard bc4ebabd6d14502351f8f8cfb246bcb07099b1aa
git push origin master –force
git设置本地账号
git config –local user.name Jerey-Jobs;git config –local user.email 610315802@qq.com
代码提交过继续修改:
git status
git add
git commit –amend
修改已经提交还未入库的代码
git rebase -i HEAD~3 可以修改历史提交,数字3可以自己设置,代表最近3笔提交。
执行后会出现:
pick:*******
pick:*******
pick:*******
把需要修改的comit前面的pick 改成 edit或e,然后保存退出。
这时通过git log你可以发现,git的最后一次提交已经变成你选的那个了, 这个时候进行修改,随后 –amend
然后 git rebase –continue .
如果前面选择了多个commit要修改,这里就会跳到下一个commit,然后依照上面修改然后提交,再continue.
另外 git rebase -i 还可以合并commit,在前面pick那个界面把要合并的commit 前面改成三squash或s.
查看远程版本
/.repo/manifests$ git remote -v
origin ssh://min.xia@10.50.10.254:29418/rk3288/rk/platform/manifest (fetch)
origin ssh://min.xia@10.50.10.254:29418/rk3288/rk/platform/manifest (push)
安装gitk:
sudo apt-get install gitk
gitk即可
git status 错误 bad index file sha1 signature
xiamin@xiamin:~/Desktop/Android/rk3288/packages/robot/Settings$ git status
error: bad index file sha1 signature
fatal: index file corrupt
这是由于git的index文件出错。需要删除rm .git/index文件,然后在仓库目录下运行git reset,重新生成index文件。
针对每个子工程都执行同样command的命令
repo forall -c command
repo forall -c git clean -fd
repo forall -c git checkout .
寻找工程下的.git删除:
find .repo/project* -name Face.git
rm -rf 出来的结果
rm -fr packages/robot/Face
repo/repo sync
生成patch
当前分支所有超前master的提交:git format-patch -M master
某次提交以后的所有patch: git format-patch 4e16 –4e16指的是commit名
从根到指定提交的所有patch: git format-patch –root 4e16
某两次提交之间的所有patch: git format-patch 365a..4e16 –365a和4e16分别对应两次提交的名称
应用patch
先检查patch文件:git apply –stat newpatch.patch
检查能否应用成功:git apply –check newpatch.patch
打补丁:git am –signoff < newpatch.patch
–no-thin
git push –no-thin review HEAD:refs/for/master
关键点是 –no-thin 选项. stackoverflow 上的解释:
默认情况下 git push 会在向服务器推送时进行优化,以将所发送的包降低到最小. 做法是发送时忽略本地仓库和远端ß仓库中共有的部分. 即 git push 默认是采用 –thin 选项的.
发生本文中出现的问题,貌似是因为某个 git 对象和服务器不一致了. 这时加上 –no-thin 参数,把该传的都传过去,问题就解决了.
本文作者:Anderson/Jerey_Jobs
博客地址 : http://jerey.cn/
简书地址 : Anderson大码渣
github地址 : https://github.com/Jerey-Jobs