git 常用命令


本文记录笔者在工作学习过程中,遇见git的问题,并列出解决办法,持续更新!!!

批量修改文件权限

find . -name `*.go` -executable | xargs chmod -x		#查找有可执行权限的文件,然后把所有文件都进行chmod -x操作

简单小结

基本操作

git init						初始化仓库
git add ~						加入到stage中
git rm				     		删除,并且git commit
git commit -m ""				提交
git status						查看提交的状态
git diff						查看修改的内容
git clone						克隆
git clean -xdf					清除本地所有的修改

历史版本

git log						查看日志
git log --pretty=oneline			简化版日志

git reset --hard HEAD^			版本回退
git reset --hard id				版本回退
git reflog						记录你的每一次命令

git checkout -- file		     命令中的--很重要,没有--,就变成了“切换到另一个分支”的命令
在commit之前用命令git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区

远端分支

git push -u origin master			第一次推送master分支的所有内容
git push origin master				非第一次推送最新修改
若有冲突:先git pull,本地合并解决冲突,再推送
git branch --set-upstream-to=origin/dev dev	设置dev和origin/dev的链接

git remote -v					    		查看远端分支数据
git checkout -b dev origin/dev			拉取远端分支到本地

分支管理

git checkout -b dev			建立新分支并且切换过去
git checkout dev			切换分支
git branch [-a]|[-r]			查看分支
git branch -d				删除分支,-D 强行删除
git merge <name>			合并某分支到当前分支
git log --graph							查看分支合并图
git log --graph --pretty=oneline --abbrev-commit

git stash				暂存数据,用在工作一半时切分支,并且新代码不会在新分支里面
git stash apply   git stash drop				弹出暂存,使用特定的命令删除暂存
git stash pop								pop
git stash list								跟下一条命令配套使用,指定使用某一个暂存的数据
git stash apply stash@{0}

冲突管理

git merge <name>无法快速的进行合并的时候,可以使用git status看到系统给我们的冲突文件,修改后再提交即可
commit若有冲突:先git pull,本地合并解决冲突,再推送
git branch --set-upstream-to=origin/dev dev	设置dev和origin/dev的链接


git pull origin [分支名]  --rebase
git status
解决冲突
git add .
git status 后提示 git rebase --continue

打标签

命令git tag <tagname>用于新建一个标签,默认为HEAD,也可以指定一个commit id;
命令git tag -a <tagname> -m "blablabla..."可以指定标签信息;
命令git tag可以查看所有标签。
命令git push origin <tagname>可以推送一个本地标签;
命令git push origin --tags可以推送全部未推送过的本地标签;
命令git tag -d <tagname>可以删除一个本地标签;
命令git push origin :refs/tags/<tagname>可以删除一个远程标签。

忽略文件

https://github.com/github/gitignore

切换、推送到远程分支

使用如下方法可以避免出现一些意外,精确的指定分支名字,可以避免出现游离状态

$ git checkout -b local_name origin/origin_name
$ git push origin local_name : origin_name

游离状态

什么是游离状态:HEAD 不指向任何分支,利用tree命令可以仔细看到HEAD的指向

当出现游离状态的时候,需要自己建立对应的本地分支即可

# 如果没有同步远程分支名
$ git checkout -b localBranch origin/branch

# 如果没有我们所需分支
$ git checkout -b newBranch

暂存而不提交

$ git stash			#暂存工作状态,可以切换分支先做其他的工作
$ git stash pop		#弹出暂存的工作状态,继续工作

删除没有跟踪的文件

$ git clean -f 			#删除没有跟踪的文件 
$ git clean -fd			#删除没有跟踪的文件夹

改名字

改本地的分支名

$ git branch -m oldname newname

改上一次commit信息,reset其中单个文件

#修改上一次提交的commit信息,运行命令后有提示说明,按照说明操作
$ git commit --amend 		

$ git reset <commit-id> <fileName>  #reset  commit中某一个文件

如果希望改多个commit信息,可以利用下面的命令,运行命令按照里面的提示操作即可

合并(修改)多个commit信息

#合并(修改)前面n个commit,运行命令后有提示说明,按照说明操作
$ git rebase -i HEAD~n   		

忽略换行符,文件权限带来的冲突

# 显示乱码
git config --global core.quotepath false

#Linux的换行符和window的换行符不同导致的冲突
$ git config --global core.autocrlf false

#修改文件权限导致的冲突
$ git config --global core.filemode false

#自动启动rebase,这样pull的时候就不会出现一些警告或者错误
$ git config --global branch.autosetuprebase always		

Git 清除远端已删除的分支

可以直接使用命令
$ git fetch -p

#可以查看remote地址,远程分支,还有本地分支与之相对应关系等信息
git remote show origin
根据提示,使用命令删除即可 
$ git remote prune origin

拉去远程分支

git checkout -b ac_branch origin/ac_branch   拉取远程分支到本地(方式一)
1、拉取远程分支到本地
2、在本地创建一个分支与远程分支对应
3、自动切换到刚创建好的分支

git fetch origin ac_branch:ac_branch  拉取远程分支到本地(方式二)
1、同步远程仓库(git fetch origin)
2、拉取远程分支到本地
3、在本地创建一个分支与远程分支对应

远程分支有多余的commit

远程分支A C1 -- C2 -- C3 -- C4			(远程分支多了C3 、C4两个commit)
本地分支A C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7		(并且把C6、C7推上去)
创建新本地分支B(基于远程分支A)
git checkout -b B origin/A
通过git reset 方式回退到
本地分支B   C1 -- C2

此时分支情况:
远程分支A 	   C1 -- C2 -- C3 -- C4
本地分支A         C1 -- C2 -- C3 -- C4 -- C5 -- C6 -- C7
本地分支B (新分支) C1 -- C2

在本地分支B上选择你想要的A本地分支的commit号
git cherry-pick C6
git cherry-pick C7
此时
本地分支B (新分支) :
C1 -- C2 -- C6 -- C7

再强推到远程分支A
此时远程A跟本地B就一样的了

把a分支某几个commit转移到b分支上

git cherry-pick <commit id>:单独合并一个提交
git cherry-pick -x <commit id>:同上,不同点:保留原提交者信息。
Git从1.7.2版本开始支持批量cherry-pick,就是一次可以cherry-pick一个区间的commit。
git cherry-pick <start-commit-id>..<end-commit-id>
git cherry-pick <start-commit-id>^..<end-commit-id>

前者表示把到之间(左开右闭,不包含start-commit-id)的提交cherry-pick到当前分支;
后者有"^"标志的表示把到之间(闭区间,包含start-commit-id)的提交cherry-pick到当前分支。
其中,到只需要commit-id的前6位即可,并且在时间上必须早于
注:以上合并,需要手动push代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值