git 技能复习进阶(开局一个键盘,内容全靠抄)

2019-10-26 10:39:16 +08:00
 Kcelone

贴个车 http://web.mit.edu/~mkgray/project/silk/root/afs/sipb/project/git/git-doc/

常用操作:

git add . 或某个文件,某些文件
git commit -m 'fix ' 提交信息
git status 查看当前版本库状态
git diff 文件 1 文件 2   对文件进行比较(也可在版本之间进行比较,后面文件均替换为版本号) 
git push 推送
git pull 拉取
git merge 合并指定分支到当前分支
git checkout +文件,表示  撤销对某文件的修改; + 分支,表示切换分支
git rm 文件  删除某文件
git clone 克隆
git checkout -b +分支,表示创建新分支(非 master 分支)
git branch 查看当前分支; + -a 表示查看所有分支 
git branch -d +分支 删除某分支

日志:

日志查询:

git log:

		查看某分支当前的版本号

操作日志查询:

		可以查看某分支自己之前执行过什么操作。

git reflog:

工作区及暂存区

	工作区就是存有.git 文件夹的父文件夹,暂存区是在.git 文件夹里的区域。
我们执行的 git add [.]就是把文件从工作区添加到了暂存区(stage)中,而 git commit 就是			把暂存区里的东西提交到当前的本地分支比如 test 分支,工作区就变干净了。

远程仓库

添加远程仓库 git remote add origin + 远程 git 地址 (例如 git@github.com:1900/reviewgit.git),

分支管理

创建一个分支就是创建一个指针,该指针指向 master 的某个节点,另外会有 head 指针来负责分支切换。具体指令在文章起始部分。

冲突解决

黄金准则是:有冲突解决冲突,而不要直接就回滚,因为代码库不是你一个人在用!

操作就是,打开冲突文件,搜索 >>>>>标识确定冲突部分,删除不想要的内容,删除>>>>  及 ====,然后 git add 文件,提交。

bug 分支

并发的处理了两个问题,问题 1 需要尽快提交解决线上问题,问题 2 还没搞定,这个时候可以利用 stash 功能来暂存。git stash,接着解决问题 1,在当前分支创建一个临时分支,然后修改问题,并提交。

暂时先这么多吧,待续。

5704 次点击
所在节点    git
25 条回复
shawndev
2019-10-26 11:38:30 +08:00
git stash, git rebase, git cherry-pick, git reset, git revert, git reflog...
wysnylc
2019-10-26 11:56:25 +08:00
测试分支未完成代码被错误合并到 A 分支,然后 A 分支进行了代码开发 3 个版本后,将 A 分支合并到主干并更新.此时 A 分支有测试分支的未完成代码和本身 A 分支正常开发的代码,主干合并了 A 分支同样被测试分支代码污染
请问如何解决?
chuxiaonan
2019-10-26 12:02:49 +08:00
@wysnylc 老哥 git rebase 了解一下
当然 如果远端都被污染了 肯定是少不了 git push --force 的
iMusic
2019-10-26 12:10:14 +08:00
这是基础,不是进阶吧。
orzorzorzorz
2019-10-26 12:46:27 +08:00
@wysnylc #2 如果不急,那就主分支合并到测试分支,写完了同步三个分支;急的话,revert A 合并进主分支的那次提交,checkout 一个新分支继续改,改完同步下三个分支
HannibaI
2019-10-26 13:38:43 +08:00
应该多写写日常工作流。这些东西我 man git 看一下就有了
phpfpm
2019-10-26 14:22:27 +08:00
@wysnylc 直接在主分支上 git revert 生成一个提交求 mr
wysnylc
2019-10-26 14:23:02 +08:00
@chuxiaonan #3 最终的做法是 reset 同时将主干和 A 分支回滚,然后重新将 A 分支的代码 commit 然后 force A 分支和主干
我的本意是想考考贴主,天天记死命令能不能解决这个问题
这种基础知识都不知道有多少博客了还拿出来炒冷饭一点干货没有
marco25
2019-10-26 14:28:33 +08:00
自从用了 magit,git help 都不需要查了
xuboying
2019-10-26 14:51:10 +08:00
没有 git fetch。。。看来是不太在乎队友在干嘛的老司机了
wysnylc
2019-10-26 14:53:33 +08:00
@phpfpm #7 不行,revert 的版本都是以后要合并到主干的,revert 会导致无法合并这部分代码
chuxiaonan
2019-10-26 14:53:47 +08:00
@wysnylc 哈哈 这样呀
sdushn
2019-10-26 16:32:17 +08:00
@wysnylc 来学习啦,如果把 A 分支的错误提交回滚,解决冲突后合并到主干呢,能否解决问题
wysnylc
2019-10-26 16:40:18 +08:00
@sdushn #13 那要看你怎么"解决"A 分支的错误,如果你只是想删除被污染的代码然后合并主干的话不行,因为这部分代码在未来是有用的,那么为了解决你的这个删除带来的问题需要将被删除的代码重新提交.而且只在 A 分支其实怎么动都无济于事,始终是需要在主干上 force 的,你细细的品
iyeatse
2019-10-26 20:19:11 +08:00
不试试 zsh 吗
gaa,gc,gst,gp,gup,grb
Pastsong
2019-10-26 20:28:31 +08:00
@iyeatse 这是 alias 是功能
weixiangzhe
2019-10-26 21:18:59 +08:00
github。上有个飞行手册啥的 覆盖面很广 很好用
secondwtq
2019-10-27 00:24:04 +08:00
@marco25 老哥有没有在大项目用过 magit,我感觉巨卡无比 ... 就没再用了


@wysnylc 有些时候是禁止 force push 的 ...
Allianzcortex
2019-10-27 02:17:48 +08:00
@secondwtq 禁止 force push 的话在我本底分支 squash & rebase 了几个我的小 commit 合并为一个,怎么同步到远程上?
Allianzcortex
2019-10-27 02:24:04 +08:00
@secondwtq 搜了下也就是这种情况: https://stackoverflow.com/questions/1302769/keeping-remote-repository-in-sync-through-a-rebase,我的解决方法也是和回答里说的,You need --force because origin/topic will change the ancestor and you have disable fast forward check. 不允许在单独的 branch force push 的话这种情形似乎无法做?...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/613144

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX