参考https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
常用命令总结
要查看远程库的信息:git remote
显示更详细的信息 git remote -v
抓取远程分支
git clone git@github.com:michaelliao/learngit.git
分支管理
查看分支:git branch
创建分支:git branch <name>
切换分支:git checkout <name>
创建+切换分支:git checkout -b <name>
合并某分支到当前分支:git merge <name>
检出远程分支:git checkout -b <name> origin/<name>
通常,合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
加上--no-ff参数就可以用普通模式合并,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" dev
删除分支:git branch -d <name>
强行删除 :git branch -D <name>
初始化一个Git仓库,使用git init命令。
添加文件到Git仓库,分两步:
-
添加到暂存区git add <file>
-
使用命令git commit -m <message>
查看工作区的状态 git status
可以查看工作区和版本库里面最新版本的区别git diff HEAD -- readme.txt
git push origin master 推送到远程仓库
如果推送失败,先用git pull抓取远程的新提交;
在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称最好一致;
建立本地分支和远程分支的关联,使用
git branch --set-upstream-to=origin/dev dev
版本回退
回退上一个版本,HEAD指向的版本就是当前版,^回退上一个版本^^回退上上个版本
git reset --hard HEAD^
回退到某次提交,通过 git log查看commit_id
git reset --hard commit_id。
用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。
撤销修改
就是让这个文件回到最近一次git commit或git add时的状态。
git checkout -- readme.txt
如果已经git add到暂存区了
git reset HEAD <file>可以把暂存区的修改撤销掉(unstage)
删除文件
git rm test.txt
bug分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。
git stash
git stash list命令看看
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了
变基
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比
标签管理
git tag <name>
git tag v1.0
默认标签是打在最新提交的commit上的。有时候,如果忘了打标签,方法是找到历史提交的commit id,然后打上就可以了
标签总是和某个commit挂钩。如果这个commit既出现在master分支,又出现在dev分支,那么在这两个分支上都可以看到这个标签
创建带有说明的标签,用-a指定标签名,-m指定说明文字:
git tag -a v0.1 -m "version 0.1 released" 1094adb
git tag查看所有标签
git show <tagname>查看标签信息
因为创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,git push origin <tagname>:
一次性推送全部尚未推送到远程的本地标签
git push origin --tags
先删除本地标签
git tag -d v0.1
从远程删除。删除命令也是push,但是格式如下:
$ git push origin :refs/tags/v0.9
打包
导出最新的版本库 git archive -o ../lastest.zip HEAD
导出某次指定提交 git archive -o ../lastest.zip 77bbea
导出指定目录 git archive -o ../src.zip HEAD:Documentation/
导出某个分支 git archive --format zip --output master.zip master
导出最近一次提交 git archive -o ../lastcommit.zip HEAD $(git diff --name-only HEAD^)
导出某次提交到某次提交
git archive -o ./latest.zip NEW_COMMIT_ID_HERE $(git diff --name-only OLD_COMMIT_ID_HERE NEW_COMMIT_ID_HERE)
解释下:NEW_COMMIT_ID_HERE 是某次提交的commit id, OLD_COMMIT_ID_HERE 是某次提交之前的提交的commit id.
忽略文件
方式1:
1.在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去
2.最后一步就是把.gitignore也提交到Git,就完成了!
如果你确实想添加gitignore忽略的文件到git仓库,可以用-f强制添加到Git:
$ git add -f App.class
方式2:( 不经常使用,可用于对方法1的补充 )
在使用方法1时,有时会发现 ,部分文件无法被忽略,这种情况下可使用以下方法进行忽略操作。
执行命令将 main.go 加入不提交队列
git update-index --assume-unchanged main.go
执行命令将 main.go 取消加入不提交队列
git update-index --no-assume-unchanged main.go
如何查看未追踪文件
git status --untracked-files=all
其他问题
如果push遇到在输入密码是熟错后,就会报这个错误fatal: Authentication failed for
解决办法:
git config --system --unset credential.helper