- git init命令把当前目录变成Git可以管理的仓库,当前目录下多了一个.git的隐藏目录(可用ll -a查看),.git目录不算工作区,而是Git的版本库。
git init
- 删除本地文件后,想从远程仓库中从新Pull最新版文件。Git提示:up-to-date,但未得到删除的文件.
# 当前本地库处于另一个分支中,需将本分支发Head重置至master.
git checkout master
git reset
# git 强行pull并覆盖本地文件
git fetch
git reset
git pull
git log 显示从最近到最远的提交日志,需要注意的是将不显示比当前版本更新的版本
git log --pretty=oneline 显示日志的简要信息(仅显示版本号和message)
git reflog 查看命令历史,包含提交和重置的所有信息
//设置git日志格式以及查找JIRA任务:
git config --global alias.lg50 "log -50 --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative"
git lg50 --grep= SIRBYH-8888
git reset
git reset HEAD~2 【回撤两个版本】
需要重新Commit。
git reset
git reset命令可以添加参数参数:
1.
git reset
2.
git reset
3.
git reset
- 工作区和暂存区: git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。

- 撤销修改
git checkout
如:git checkout
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
git reset HEAD <file>可以把暂存区的修改撤销掉(unstage),重新放回工作区
版本库中要删除的文件,用命令git rm删掉,并且git commit
如 git rm readme.txt
如果是工作区的误删,可以用git checkout
如果执行完git commit后就不能用git checkout
注意:从未被添加到版本库就被删除的文件,是无法恢复的
本地仓库下运行git remote add origin git@github.com:cike/learngit.git将已有的本地仓库与远程库关联
git push -u origin master 把本地库的内容推送到远程,用git push命令,实际上是把当前分支master推送到远程
第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送到远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令去掉-u。
git remote -v 查看远程库详细信息,显示内容与权限相关
git checkout -b dev origin/dev 创建并切换到本地分支dev,同时自动和远程origin/dev关联
如果git pull提示no tracking information,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to <branch-name> origin/<branch-name> 如:git branch --set-upstream-to=origin/dev dev 单独设置本地dev与远程origin/dev分支的链接
git config --local --list
git push -f --set-upstream origin master:master
方式一 git branch --set-upstream-to=origin/master master
方式二 git branch -u origin/master master
git clone git@github.com:cike/xxx.git
Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议,使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,只开放http端口的条件下就无法使用ssh协议而只能用https
git checkout -b dev 创建并切换分支(新增一个名为dev的指针,指向和当前master<当前分支为master>相同的提交,再把HEAD指向dev,就表示当前分支在dev上),相当于 git branch dev 及 git checkout dev 两条命令
git branch 可以查看所有本地分支,当前分支前会有一个*,git branch -a 可以查看所有本地及远程分支分支修改后没有提交是无法切换到另一分支的
git merge dev用于合并指定分支到当前分支,默认采用Fast-forward即“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。合并完成后,就可以放心地删除dev分支了git branch -d dev
合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。如果强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" dev 合并要创建一个新的commit,所以加上-m参数,把commit描述写进去
Git 2.23中新增了git switch -c dev来创建并切换分支,git switch dev来切换到已有分支
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
用git log
git log
开发中途当前分支不具备提交条件,同事又需要在当前分支或者其他分支上修复bug,此时可以用git stash 暂存现场,以达到一个干净的工作区用以修改或者切换到其他分支
git stash list 可查看所有暂存现场
git stash apply stash@{0} 来指定要恢复的现场,同时可配合git stash drop 对暂存进行删除
git stash pop 恢复的同时把stash内容也删除了
对于同源分支的修改提交,可以用git cherry-pick <commit>来复制一个特定提交到当前分支,复制的同时会做一个新的commit
git branch -d localBranchName
git push origin --delete remoteBranchName
rebase操作可以把本地未push的分叉提交历史整理成直线;
rebase的目的是使得我们在查看历史提交的变化时更容易,因为分叉的提交需要三方对比。
git tag <name>就可以打一个新标签,默认标签是打在最新提交的commit上
git tag查看所有标签
git tag <name> <commit> 为历史提交打标签
git show <tagname>查看标签信息
git tag -a v0.1 -m "version 0.1 released" 1094adb 带有说明的标签,用-a指定标签名,-m指定说明文字
git tag -d v0.1 删除标签,创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除。
如果要推送某个标签到远程,使用命令git push origin <tagname> 或者,一次性推送全部尚未推送到远程的本地标签git push origin --tags
如果标签已经推送到远程,要删除远程标签就麻烦一点,先从本地删除:git tag -d v0.9 然后,从远程删除。删除命令也是push,但是格式如下:git push origin :refs/tags/v0.9
git commit
该命令将打开您的编辑器,并允许您更改最后一次提交消息
git branch -m feature-brunch feature-branch
git push origin --delete feature-brunch
git push origin feature-branch
将所有更改回滚到新分支:
注意:确保先提交或存储更改,否则一切都将丢失!
git branch feature-branch
git resetHEAD~ --hard
git checkout feature-branch
这将创建一个新分支,然后将主分支回滚到您进行更改之前的位置,然后最终检出您之前所有更改完整的新分支。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!