git

作者: android老男孩 | 来源:发表于2018-07-02 15:24 被阅读0次

git基础

分布式版本管理系统

客户端并不只提取最新版本的文件快照,而是把代码仓库完整地镜像下来。这么一来,任何一处协同工作用的服务器发生故障,事后都可以用任何一个镜像出来的本地仓库恢复。因为每一次的提取操作,实际上都是一次对代码仓库的完整备份

git的基本概念

  • 工作区 你工作的代码

  • 暂存区 所有的工作代码都有index对应,

  • 版本库 远端服务器上的代码

  • HEAD :
    当前活跃分支的游标,可以用 checkout 命令改变 HEAD 指向的位置。
    形象的记忆就是:你现在在哪儿,HEAD 就指向哪儿,所以 Git 才知道你在那儿!

  • origin:
    默认的远程仓库的名字

  • master:
    首次创建仓库时默认分支的名字,在大多数情况下,master是指主干分支。
    HEAD是git内置的定义好的特定含义功能,不可以修改。master,origin都是常用的公共命名方式,可以有自己的定义。

git查看信息操作

  • git log -p -数字(1,2,3,4)
    我们常用 -p 选项展开显示每次提交的内容差异,用 -2 则仅显示最近的两次更新
  • git log 查看提交信息
  • git status查看本地改动
  • git diff查看具体修改的地方

git提交操作

  • git add . 加入本地新增所有文件
  • git add 具体文件路径加入文件
  • git commit -m "提交并填写信息"
  • git commit -a -m "跳过暂存区"
  • git fetch 远程仓库名
  • git push [remote-name] [branch-name]
  • git push [remote-name] master:master
    将本地的master分支推送到远端的master分支,如果没有就新建一个
  • git stash
    当你不想commit的时候
注意切换分支一定要commit或stash保存一下
  • git stash pop 恢复改动
  • git stash list 查看stash列表
  • git stash pop/apply [<stash>]
    恢复stash列表中的id
stash@{0}: WIP on master: b7ba44d 初始化
stash@{1}: WIP on master: b7ba44d 初始化
stash@{2}: WIP on master: b7ba44d 初始化

git stash pop stash@{0}

apply与pop的区别是,apply会保留暂存区的id,pop会删除暂存区的id

git移除以及放弃修改

  • git check out 文件路径
  • git rm 文件路径
  • git rm --cached readme.txt 只从暂存区中移除

远程仓库

git remote -v 查看所有远程仓库
git remote rename 远程仓库 新远程仓库

重命名操作

git拉取操作

  • git fetch:
    相当于是从远程获取最新版本到本地,不会自动merge
    git fetch 远端仓库名 远端分支名
  • git pull:
    git pull origin/master
    拉取远程master分支到本地master分支上
    实际操作中fetch更安全一些

git log

  • git log --oneline --graph:可以图形化地表示出分支合并历史.
  • git log --oneline

git diff

  • git diff [branchA] [branchB] 比较两个分支的改动
  • git diff commitid commitid 比较两个commit的改动
  • git diff HEAD比较工作区和上次提交之间所有的改动.

git分支操作

  • git branch -vv 查看本地分支对应的远程分之
  • git branch -a 查看所有分支列表,包括本地和远程
  • git branch -d 某某 删除某某分支
  • git branch 分支名
  • git checkout 转换分支

merge与rebase用法区别

merge简单,保留了提交历史和时间次序,但是提交历史被大量的 merge 提交污染了
rebase把复杂的历史变成优雅的提交线,清除烦人的 merge 提交。
rebase 把所有的提交压缩成一个 “patch”。然后把 patch 添加到目标分支里。

本地开发:如果你没有和别人协同工作,使用rebase更好

  • git merge upstream/master 远端仓库名/远端分支 默认合并到当前分支上
  • git rebase master
  • rebase解决冲突
  • 冲突解决完之后,使用git add <file-name>来标记冲突已解决,最后执行git rebase --continue继续。如果中间遇到某个补丁不需要应用
  • git rebase --abort
  • rebase执行之前的状态

git revert 和 git reset的区别

  1. git revert是用一次新的commit来回滚之前的commit,git reset是直接删除指定的commit。
  2. git revert只会删除具体的commit内容
  3. git reset会将你commit之前的全部删除
  4. git reset -- hard与mixed默认的区别
    hard是修改所有工作区暂存区而mised只是修改暂存区还需要你checkout
  5. 注意git revert之后线上代码的commit内容也删除,revert一般不会造成冲突,reset一般会有冲突
  • git revert
 mBtnTest = findViewById(R.id.btn_test);
 mBtnTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                
            }
        });

git commit 提交了一个点击事件
在push之前 revert这个commit id 在git log中会出现一个

commit 9cd94ec870c124ec8ac2362acba6bd0926f66b70
Author: cuiqiang <cuiqiang>
Date:   Sat Nov 25 13:12:12 2017 +0800

    Revert "增加点击事件"
    
    This reverts commit d8cd57fcee4cad1e234c2af22784534a1234f4fa.

但是在你push之后,该提交内容会被移除

mBtnTest = findViewById(R.id.btn_test);
  • git reset

强制返回某次提交,并将之前的commit信息全部删除,本地代码也回到reset的指针位置

    增加点击事件

commit 9cd94ec870c124ec8ac2362acba6bd0926f66b70
Author: cuiqiang <cuiqiang>
Date:   Sat Nov 25 13:12:12 2017 +0800

    Revert "增加点击事件"
    
    This reverts commit d8cd57fcee4cad1e234c2af22784534a1234f4fa.

commit 56c3e78df3dfbcdd8ce5176c82077fcd1da6241d
Author: cuiqiang <cuiqiang>
Date:   Sat Nov 25 13:11:20 2017 +0800

    Revert "添加检查权限的方法"
    
    This reverts commit 3e75bb4aac34ae8b8bfc68aa189bbe376bd3ec01.

commit 3e75bb4aac34ae8b8bfc68aa189bbe376bd3ec01
Author: cuiqiang <cuiqiang>
Date:   Sat Nov 25 13:08:37 2017 +0800

    添加检查权限的方法

commit d8cd57fcee4cad1e234c2af22784534a1234f4fa
Author: cuiqiang <cuiqiang>
Date:   Sat Nov 25 13:02:02 2017 +0800

    增加点击事件

commit d901a91f3d2701f47bdc43bc8eff1acb9fadf7b2
Author: cuiqiang <cuiqiang>
Date:   Sat Nov 25 12:56:05 2017 +0800

git reset --hard 3e75bb4aac34ae8b8bfc68aa189bbe376bd3ec01添加权限方法

 Author: cuiqiang <cuiqiang>
Date:   Sat Nov 25 13:08:37 2017 +0800

    添加检查权限的方法

commit d8cd57fcee4cad1e234c2af22784534a1234f4fa
Author: cuiqiang <cuiqiang>
Date:   Sat Nov 25 13:02:02 2017 +0800

    增加点击事件

commit d901a91f3d2701f47bdc43bc8eff1acb9fadf7b2
Author: cuiqiang <cuiqiang>
Date:   Sat Nov 25 12:56:05 2017 +0800

    增加initdata方法

commit b7ba44dbae68661d940e68bab2da0dafe91dff30
Author: cuiqiang <cuiqiang>
Date:   Sat Nov 25 12:49:07 2017 +0800

    初始化

 

git chery-pick

可以将其它分支的commit提交,提交到自己的分支上
然后可以用git rebase改变提交顺序

git 忽略

  • bin/ 该文件夹下的所有内容都会被忽略,但是不忽略bin文件
  • /bin 忽略根目录下的bin文件
  • *.iml 表示忽略所有 .iml结尾的文件
  • !lib.iml 表示但lib.iml除外
  • test.txt: 忽略当前路径的 test.txt 文件

.gitignore规则不生效

.gitignore只能忽略那些原来没有被追踪的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。

解决方法就是先把本地缓存删除(改变成未追踪状态),然后再提交修改后的.gitignore:

git rm -r --cached .
git add .
git commit -m '修改.gitignore'

相关文章

网友评论

      本文标题:git

      本文链接:https://www.haomeiwen.com/subject/dzlluftx.html