git基本操作与分支
转载
基础
git init
初始化git status
检查当前文件状态(查看已被暂存的修改或未被暂存的修改)git status -s
检查当前文件状态(查看已被暂存的修改或未被暂存的修改-简略版)- A: 你本地新增的文件(服务器上没有).
- C: 文件的一个新拷贝.
- D: 你本地删除的文件(服务器上还在).
- M: 文件的内容或者mode被修改了.
- R: 文件名被修改了。
- T: 文件的类型被修改了。
- U: 文件没有被合并(你需要完成合并才能进行提交)。
- X: 未知状态(很可能是遇到git的bug了,你可以向git提交bug report)。
git add filename
追踪新增文件/暂存已修改文件git add *
添加所有未跟踪文件/暂存所有已修改问及那- 查看已暂存和未暂存的修改
git diff
查看尚未暂存的文件更新了哪些部分git diff --staged
查看已暂存的将要添加到下次提交里的内容git diff --cached
查看已经暂存起来的变化
- 提交更新
git commit
弹出编辑器输入更新内容即可(#号会被过滤,不能为空消息)git commit -v
弹出编辑器输入并显示代码更改信息git commit -a
自动把所有已经跟踪过的文件暂存起来一并提交(不建议)git commit -m "更新内容描述"
直接命令行编写提交备注信息,不会弹出编辑器
- 移除文件
rm filename
删除文件git rm filename
删除文件跟踪git rm -f filename
强制删除之前修改过或已经放到暂存区的文件git rm --cached filename
仓库中删除/暂存区域移除(文件还是会在原来的地方)
git mv file_from file_to
移动文件/重命名git clone url
克隆指定远程项目(自动设置本地 master 分支跟踪克隆的远程仓库的 master 分支)- 查看提交历史
git log
git log -p -2
显示每次提交所引入的差异,如使用 -2 选项来只显示最近的两次提交git log --stat
简略统计信息git log --pretty=oneline
个性化显示记录(pretty值:oneline、short、full 、fuller )git log --pretty=format:"%h %s" --graph
形象地展示你的分支、合并历史(不仅这几个参数)- 还可以指定作者、日期等高级搜索功能
- 还可以查看指定文件的记录
git commit --amend
重新修改上次 commit 的提交信息(包括上次 commit 之后新暂存区的代码)git reset HEAD filename
取消暂存(危险)git checkout -- filename
撤销修改/还原成上次提交的样子(危险)git reset --hard HEAD
回到上一次提交的状态,未提交的工作都会丢失(危险)- 远程仓库
git remote
查看远程仓库git remote -v
查看远程仓库URLgit remote add 仓库名 仓库地址
添加远程仓库git branch --set-upstream-to=远程仓库名/远程分支名
本地仓库当前分支关联/绑定远程分支,每次 push 就不需要指定远程仓库分支名了- 从远程仓库中抓取与拉取
git fetch 仓库名
从远程仓库中获得数据(只下载/不合并)git pull
当前分支设置了跟踪远程分支,来自动抓取后合并该远程分支到当前分支(相当于git fetch
+git merge
)
git push
将当前分支推送到远程仓库关联分支(需要先关联远程分支)git push 远程分支名 本地分支名
推送指定分支到远程仓库分支(关联远程分支后可以省略远程仓库名)git push 远程仓库名 远程仓库分支名:本地分支名
推送到远程仓库分支(未关联远程分支的情况下进行推送)git push -f 远程服务器分支名 当前本地分支名
强制推送到远程仓库(不建议熟练使用,有可能覆盖别人的)git push --set-upstream 远程仓库名 本地分支名
(省略形式为:git push -u origin master)将本地的master分支推送到origin主机git remote show 远程仓库名
查看某个远程仓库git remote rename 旧远程仓库名 新远程仓库名
重命名远程仓库git remote remove 远程仓库名
移除远程仓库(一旦你使用这种方式删除了一个远程仓库,那么所有和这个远程仓库相关的远程跟踪分支以及配置信息也会一起被删除)
Git 分支
git branch
显示所有分支git branch 新分支名
创建新分支(创建 一个新分支,并不会自动切换到新分支中去)git checkout -b 新分支名
创建新分支并切换过去(创建 一个新分支,自动切换到新分支中去)git log --oneline --decorate
查看各个分支当前所指的对象git checkout 分支名
切换分支git log --oneline --decorate --graph --all
显示提交历史、各个分支的指向以及项目的分支分叉情况。git branch -v
查看每一个分支的最后一次提交git branch -vv
将所有的本地分支列出来并且包含更多的信息iss53 7e424c3 [origin/iss53: ahead 2] forgot the brackets master 1ae2a45 [origin/master] deploying index fix * serverfix f8674d9 [teamone/server-fix-good: ahead 3, behind 1] this should do it testing 5ea463a trying something new
这里可以看到 iss53 分支正在跟踪 origin/iss53 并且 “ahead” 是 2,意味着本地有两个提交还没有推送到服务器上。 也能看到 master 分支正在跟踪 origin/master 分支并且是最新的。 接下来可以看到 serverfix 分支正在跟踪 teamone 服务器上的 server-fix-good 分支并且领先 3 落后 1, 意味着服务器上有一次提交还没有合并入同时本地有三次提交还没有推送。 最后看到 testing 分支并没有跟踪任何远程分支。
需要重点注意的一点是这些数字的值来自于你从每个服务器上最后一次抓取的数据。 这个命令并没有连接服务器,它只会告诉你关于本地缓存的服务器数据。 如果想要统计最新的领先与落后数字,需要在运行此命令前抓取所有的远程仓库。 可以像这样做:git fetch --all; git branch -vv
git branch --no-merged
查看所有包含未合并工作的分支git branch --no-merged 分支名
查看未合并到 分支名 的分支git checkout -b 本地分支名 远程仓库名/远程分支名
检出远程分支分支到本地分支git push 远程仓库名 本地分支名:远程分支名
本地分支推送到远程分支(远程没有这个分支的情况)
删除提交记录
git reset --hard 提交记录hash6位
切换当前分支到指定提交记录git push 远程仓库名 HEAD --force
将当前分支记录设置为 HEAD
分支合并
git merge 被合并分支名
将被合并分支合并到当前分支
无冲突合并
- 没有冲突就会自动合并并创建一个新的分支,有冲突就会停下来等待解决分支
有冲突合并解决
- 存在冲突可以通过
git status
查看冲突文件- 冲突会显示到文件中,冲突地方通过
===
号进行分割,对应<<< HEAD
是当前分支,>>> beihebing
是被合并分支<<<<<<< HEAD ======= 第零行 第一行 第二行 第三行 >>>>>>> beihebing
git mergetool
可视化工具解决分支合并问题(可选的工具列表opendiff
(默认) kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc codecompare smerge emerge vimdiff nvimdiff)- 合并完毕后通过
git add filename
表明冲突已解决,然后git commit
命令提交即可
- 冲突会显示到文件中,冲突地方通过
git reset --merge
中止合并git merge --abort
恢复到你运行合并前的状态,但当运行命令前,在工作目录中有未储藏、未提交的修改时它不能完美处理
其他及远程分支
git branch --merged
查看哪些分支已经合并到当前分支git branch -d 分支名
删除指定分支(删除指定分支的所有信息)git branch -D 分支名
强制删除指定分支(同上)git push 远程仓库名 远程仓库分支名
将本地当前分支推送到远程仓库的分支中- 跟踪分支
git checkout --track 远程仓库名/远程分支名
当前分支自动跟踪远程分支(设置之后git pull
自动拉取合并设置的这个远程分支,默认git clone
会自动地创建一个跟踪 远程仓库名/master 的 master 分支)git checkout -b 本地指定分支名 远程仓库名/远程分支名
(将本地分支与远程分支设置为不同的名字)git branch -u 远程仓库名/远程分支名
(没懂 设置已有的本地分支跟踪一个刚刚拉取下来的远程分支,或者想要修改正在跟踪的上游分支)
git push 远程仓库名 --delete 要删除分支名
删除远程分支(远程仓库名为git remote add 仓库名 仓库地址
添加的仓库名)
变基(危险)
如果提交存在于你的仓库之外,而别人可能基于这些提交进行开发,那么不要执行变基。
git rebase 目标分支
变基:将提交到某一分支上的所有修改都移至另一分支上(将当前分支合并到目标分支,与git merge
功能相同,但是提交历史更干净整洁)示例: 切换到 experiment 分支,并将 experiment 修改转移到 master 分支上去
git checkout experiment git rebase master
git rebase --onto master server client
高级变基参考: https://git-scm.com/book/zh/v2/Git-分支-变基
“取出 client 分支,找出它从 server 分支分歧之后的补丁, 然后把这些补丁在 master 分支上重放一遍,让 client 看起来像直接基于 master 修改一样”。这理解起来有一点复杂,不过效果非常酷。
特殊文件
- .gitignore 声明要忽略的文件、文件夹列表(一行就代表一项要忽略的项目,支持正则)
博 主 :夏秋初
地 址 :https://www.cnblogs.com/xiaqiuchu/p/15924092.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
地 址 :https://www.cnblogs.com/xiaqiuchu/p/15924092.html
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!