首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
Coding
V2EX  ›  git

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

  •  
  •   Kcelone · 49 天前 · 3551 次点击
    这是一个创建于 49 天前的主题,其中的信息可能已经有所发展或是发生改变。

    贴个车 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 地址 (例如 [email protected]:1900/reviewgit.git),
    

    分支管理

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

    冲突解决

    黄金准则是:有冲突解决冲突,而不要直接就回滚,因为代码库不是你一个人在用!
    
    操作就是,打开冲突文件,搜索 >>>>>标识确定冲突部分,删除不想要的内容,删除>>>>  及 ====,然后 git add 文件,提交。
    

    bug 分支

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

    暂时先这么多吧,待续。

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


    @wysnylc 有些时候是禁止 force push 的 ...
        19
    Allianzcortex   49 天前 via iPhone
    @secondwtq 禁止 force push 的话在我本底分支 squash & rebase 了几个我的小 commit 合并为一个,怎么同步到远程上?
        20
    Allianzcortex   49 天前 via iPhone
    @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 的话这种情形似乎无法做?...
        21
    secondwtq   49 天前
    @Allianzcortex 就是不能做。实际上有些项目是鼓励控制 commit size 的
        22
    nznd   47 天前
    自己一个人仓库 push 不上去 就 fuxk 一下(
    当然这不是好习惯 但是设备多起来 git 控制版本有点繁琐,remote 桌面一个复制就过去了
    要是用 git 一定要 pull merge commit push 然后再去另一边 pull 我好难啊(
        23
    wysnylc   47 天前
    @secondwtq #18 所以要去除项目保护才行,本身出现这种问题就需要重视
        24
    coco65535Plus   47 天前
    git commit --amend -m "new xxxx"

    git merge --no-ff [develop]
        25
    coco65535Plus   47 天前
    git remote set-url origin [new remote repository url] 项目迁移地址时使用
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   843 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 22:23 · PVG 06:23 · LAX 14:23 · JFK 17:23
    ♥ Do have faith in what you're doing.