记录工作中常用Git命令

你好!这里是风筝的博客,

欢迎和我一起交流。


记得17年的时候知道Git这个东西,虽然写了一点东西:Linux下使用GitHub

但当时还是没怎么用过。。。。。。
直到毕业了来公司,才在工作中把Git用起来,惭愧。

工作两年了,记录下日常碰见和所用的Git 问题和命令~
ps:下面的所有sunxi-dev都是我的分支名!

【代码分支】

分为本地分支和远程分支:
本地:git branch -vv
远程:git branch -a

创建分支:git checkout -b sunxi-dev
删除分支:git branch -D sunxi-dev
删除时会出现一个sha值,误删可以使用:git branch sunxi-dev sha值恢复
切换分支:git checkout -b sunxi-dev longan/sunxi-dev(使用git branch -a查看)
Repo切换全部分支:repo forall -c ‘git checkout -b sunxi-dev remotes/longan/sunxi-dev’
repo sync

【暂存本地代码】

使用git pull代码时,经常会碰到有冲突的情况,需要merge合并,可以先提交你的改变或者先将本地修改暂时存储起来。
将修改暂存:git stash
这样本地的所有修改就都被暂时存储起来 ,使用git stash list可以看到保存的信息,其中stash@{0}就是刚才保存的标记,这样就可以pull了。
拉取最新代码:git pull
还原暂存的内容:git stash pop stash@{0}
有时候会出现冲突,打开冲突文件会看到以下内容:

<<<<<<< Updated upstream
	int i, j;
=======
	int i, z;
>>>>>>> Stashed changes

其中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashed changes之间的内容就是本地修改的内容。
碰到这种情况,Git也不知道哪行内容是需要的,所以要用户自行确定需要的内容。

【代码提交】

查看本地修改:git status
添加到:git add -A
填写修改信息:git commit -s
如果想追加提交, 记住上次的提交号,git log可以查到。
或者使用git commit --amend追加提交
查看本地仓库:git remote
查看远程分支:git branch -vv
提交代码:git push lichee HEAD:refs/for/sunxi-dev
提交代码的格式为:git push <本地仓库> HEAD:refs/for/<远程分支>
【实战】:
理论上,应该在基于最新的代码上面push,但是有时我们并不能保证现在的环境是最新的,所有提交时会出现conflict,不能merge:
所以先准备一份最新的代码:git pull
cherry-pick拉取冲突的补丁:git fetch xxxxxxxx && git cherry-pick FETCH_HEAD
手动解决冲突:其中HEAD 和=====之间的内容就是pull下来的内容,====和change id之间的内容就是本地修改的内容。
解决完冲突之后git add .并继续运行 git cherry-pick --continue
git commit --amend手动添加change id号:Change-Id: xxxxx
提交代码:git push <本地仓库> HEAD:refs/for/<远程分支>

【回滚和撤销】

回滚:git reset --hard commit_id
回滚最新提交:git reset --hard HEAD^
撤销:
暂未添加到缓存区,对于单个文件:git checkout – filename
暂未添加到缓存区,对于所有文件:git checkout – .
已添加到缓存区,对于单个文件:git reset HEAD filename
已添加到缓存区,对于所有文件:git reset HEAD
从工作区移除未追踪的文件:git clean -df(很容易地移除.o和.exe等C编译器生成的文件)
撤销commit:
git reset --soft HEAD^(软重置,只撤销了git commit操作,保留了 git add 操作)
git reset --hard HEAD^(危险,全部重置到了指定版本,暂存区也会被重置,工作区的代码也回退到了这一版本,但是可以用git reflog找回commit_id然后回滚即可)
git reset --mixed HEAD^(保留提交的源码改动,只是将索引信息回退到了某一个版本,如果还需要继续提交,再次执行 git add 和 git commit)

撤销merge:git revert commit_id
git commit --amend手动添加change id号
git push <本地仓库> HEAD:refs/for/<远程分支>

【冲突解决】

一般来说,git pull --rebase并解决冲突重新提交即可。
生成补丁:git format-patch HEAD -1
回退上个版本:git reset --hard HEAD^
更新:git pull --rebase
打补丁:git am 0001-XXX.patch
如果补丁失败,先恢复:git am --abort恢复
重新打补丁:git am 0001-XXX.patch --reject
此时出现一个rej后缀文件,里面提示冲突的内容
解决冲突,然后运行 “git am --continue”
添加到缓存区:git add xxx
追加提交:git commit --amend

【repo sync失败】

使用repo sync更新代码失败,远程tag对不上:

Fetching projects:  98% (77/78)  From http://gerrit.allwinnertech.com:8081/lichee/linux-4.9
 ! [rejected]                  tablet-a100-q-v2.2 -> tablet-a100-q-v2.2  (would clobber existing tag)
error: Cannot fetch lichee/linux-4.9

error: Exited sync due to fetch errors

you should update your local tags with remote tags:git fetch --tags -f
参考:https://stackoverflow.com/questions/58031165/how-to-get-rid-of-would-clobber-existing-tag

猜你喜欢

转载自blog.csdn.net/Guet_Kite/article/details/117554584