Git

Git常用命令

Posted by 夏敏的博客 on June 29, 2016

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

作者:Anderson大码渣,欢迎关注我的简书: Anderson大码渣