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 loggit 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 -vvgit 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 mastergit 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
如果对你有帮助,可以点一下 推荐 或者 关注 吗?会让我的分享变得更有动力~
转载时请带上原文链接,谢谢。

浙公网安备 33010602011771号