• Git 笔记


    *

    廖雪峰 git 教程


    git clone git地址

    git pull 拉取文件到本地

    如果需要提交文件,先push

    废弃某个加在了缓冲区的文件
    git checkout -- aa.txt

    ------------- git添加一个文件 --
    git add aa.txt

    ------------- git撤销本地所有未提交的更改 [有效]-------------------
    1. git clean -df
    2. git reset --hard
    第一个命令只删除所有untracked的文件,如果文件已经被tracked, 修改过的文件不会被回退。
    而第二个命令把tracked的文件revert到前一个版本,对于untracked的文件(比如编译的临时文件)都不会被删除。


    ====================
    git push origin master

    gitk 可以打开可视窗口

    ================== 20170511 ============
    1,新增加一个文件,修改从工作区添加到stage区
    git add file1 [file2] [file3] 可以添加多个文件
    2,git commit -m "你的备注"

    git init 初始化仓库

    git checkout -- filename, 舍弃这个文件的修改

    git diff filename,查看文件修改的地方

    修改文件后,提交时,依然两步走,add,commit
    如果直接commit提交,会说 not staged for commit,意思是文件还没有准备好提交

    git log --pretty=oneline 可以看提交记录

    ============== 版本回退 =========
    当前版本是HEAD,前一个版本是HEAD^,再前一个版本是HEAD^^,往上100个版本是 HEAD~100
    git reset --hard HEAD^,返回到上一个版本,开始一直出错,后来键盘改为大写 写HEAD^,就可以了

    如果【git bash】窗口还没有关闭,上面用git log是看到了一长串id,例如 9c4102.....,
    如果恢复到上面几个版本后,后悔了,可以重新找回来,例如 git reset --hard 9c4102,就这几位数字就可以,能唯一标识就行
    a001,b002,c003,版本,从c一直还原到a,然后又想恢复到c版本,则可以用上面的 git reset --hard c003XX

    如果【git bash】关闭了,例如第二天开机来找,后悔了,又忘记了commit id,怎么办,git reflog
    可以记录你每次的命令记录
    ==========
    HEAD指向当前版本,git reset --hard commit_id 允许你在各个版本中来回穿梭
    想回到过去,git log 看一下你想去过去哪个版本
    想回到未来,git reflog 看一些你想去当前时光轴往后(即未来)的 哪个版本
    ==========

    git diff HEAD filename 工作区和当前版本比较
    ============== 工作区,stage区,master
    git checkout -- filename,修改还没有add到暂存区了,舍弃修改,(从工作区舍弃修改)
    git reset HEAD filename,修改已经add到暂存区了,舍弃修改(从stage区舍弃stage状态,但还在工作区),
    然后还辅以git checkout -- filename,让工作区的也舍弃修改,世界和谐了
    ==============
    场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout -- filename。
    场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。
    场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
    ==============

    提交的文件删除后,git检测到了
    如果确实要删除,两个步骤:1,git rm 文件名,2,git commit -m "备注:删除了某个文件"
    如果这个文件是误删,则 git checkout -- test.txt,(git checkout)其实是用版本库中的版本替换工作区的版本,如论工作区修改或删除,都可以一键还原
    ---------------
    远程仓库
    git@192.168.0.60:luojq/learngit.git

    一,本地先有了一个learngit的项目,然后push到远程仓库
    1,在gitlab上面建立了一个learngit的项目,然后让本地与远程仓库关联
    git remote add origin git@192.168.0.60:luojq/learngit.git
    2,把本地推送给远程,-u是因为远程仓库现在是空的
    git push -u origin master
    3,以后本地提交,
    git push origin master ?? origin/master
    二,远程仓库先有了一个项目,然后clone到本地
    git@192.168.0.60:archive/workprocess.git
    git clone git@192.168.0.60:archive/workprocess.git
    git@192.168.0.60:luojq/catAPI.git

    ========== 分支
    新建一个分支dev,并切换到该分支上,【-b 表示创建并切换】
    git checkout -b dev
    相当于1,git branch dev, 2,git checkout dev

    在分支上修改,然后切换到master上,合并分支的修改,步骤:
    1,git checkout dev 切换到分支dev上,然后去修改东西,例如readme.txt
    2,git checkout master ,切换回到主干
    3,git merge dev,在主干上合并dev分支的修改【合并某分支到当前分支】
    4,git branch -d dev ,dev完成了它的使命,删除该分支,这 过河拆桥啊

    显示的好看一些
    git log --graph --pretty=oneline --abbrev-commit

    使用【强制禁用fast forward模式合并分支:--no-ff】
    git merge --no-ff -m "merge with no-ff" devbranch


    git stash 暂存
    git stash list 查看
    1,git stash apply [stash@{0}] 重新恢复[指定的stash,如果有多个]
    2,git stash drop 删除暂存stash

    1和2 可以合并为 git stash pop,恢复并删除
    说明stash 是一个栈


    git branch -D <分支名>,如果一个分支上的修改已经add,commit了,然后删除,会提示没有merge,此命令强制删除分支

    ============= 从远程仓库clone下来的项目 ==========
    1,git remove -v 查看远程 抓取和推送的 具体信息
    2,
    git push origin master
    git push origin <目的分支例如dev>

    在本电脑的另一个目录clone下远程仓库,
    然后
    想把远程的dev 创建到本地来,
    git checkout -b dev origin/dev 出现问题,原因是我clone前 之前的一个版本没有将dev分支 push 到远程仓库
    所以先 1, git pull
    2, git checkout -b dev origin/dev 就可以了

    3,我在dev分支上,git push origin dev,将本地dev分支的更新push到远程dev分支上去了
    共三步,add,commit,push

    其他人在自己的dev分支修改后,提交到了远程的dev分支
    你想把远程的dev更新 同步到 本地的dev分支上
    1,git branch --set-upstream dev origin/dev (指定本地dev 与 远程dev 的链接)
    2,git pull(仅这步是不行的)

    ===============================
    因此,多人协作的工作模式通常是这样:

    首先,可以试图用git push origin branch-name推送自己的修改;

    如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

    如果合并有冲突,则解决冲突,并在本地提交;

    没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

    如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

    这就是多人协作的工作模式,一旦熟悉了,就非常简单。
    =============================================

    标签

    git tag v1.0
    git log --pretty=oneline --abbrev-commit
    git tab v0.9 6577556 ,有时候忘了给之前的打一下标签,可以git log 查看标签,然后 此处末尾的是commit_id

    git show <tagname>

     =================

    ===================
    工作的模式
    1,git checkout xzg-ljq ,切换到自己的分支
    2,git merge xzg 把xzg分支最新的东西拿下来,(还是从远程拿??)
    3,xzg-ljq分支修改后,commit,(如果需要push到远程xzg-ljq分支,git push origin xzg-ljq)

    4,然后切换到xzg,git checkout xzg

    5,然后本地 xzg 从本地 xzg-ljq分支merge东西,git merge xzg-ljq

    6,开通了xzg push到远程的权限后,与其他同事一起合代码,push到远程origin xzg ,, 【git push origin xzg】


    =========== 一次性添加所有文档 ==============
    git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。

    git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)

    git add -A :是上面两个功能的合集(git add --all的缩写)
    ===================
    git push origin/xzg

    git config user.name 查看当前git用户

    ==============================
    如果想合并特定的提交到某一分支上
    例如 xzg-ljq 某一次提交 想合并到 xzg分支上
    76cada - 62ecb3 - b886a0 [xzg-ljq],现在xzg-ljq提交了三次

    1,只想合并62ecb3 到xzg 上
    git cherry-pick 76cada - 62ecb3

    2,想合并某一分支的一系列commits,例如76cada - 62ecb3
    可以基于xzg-ljq分支在新建一个分支,作为中间桥梁
    git checkout newbranch 62ecb3 //62ecb3是那个系列的最后一个commit
    git rebase --ontomaster 76cada^,(人家举例是合并到master上,那我这里难道ontoxzg-ljq??,待测试)

    参考文章: 

    Git合并特定commits 到另一个分支

    *

    有问题在公众号【清汤袭人】找我,时常冒出各种傻问题,然一通百通,其乐无穷,一起探讨


  • 相关阅读:
    事务
    handler
    codeforces 27E Number With The Given Amount Of Divisors
    暑期实践日志(五)
    暑期实践日志(四)
    暑期实践日志(三)
    暑期实践日志(二)
    暑期实践日志(一)
    数论 UVALive 2756
    数论 UVALive 2911
  • 原文地址:https://www.cnblogs.com/qingmaple/p/6847151.html
Copyright © 2020-2023  润新知