git 一些需求组合

查看git管理的文件 git ls-files

删除文件

如果要删除文件,最好用git rm file_name,而不应该直接在工作区直接rm file_name。
如果一个文件已经add到暂存区,还没有commit,此时如果不想要这个文件了,有两种方法:
1,用版本库内容清空暂存区,git reset HEAD
2,只把特定文件从暂存区删除,git rm -r —cache
3. 有时候忘记写.gitignore 误操作将很多文件添加。使用git rm -rf file

撤销

  1. git checkout – file可以丢弃工作区的修改(用暂存区替换)
  2. git reset HEAD file可以把暂存区的修改撤销掉,重新放回工作区状态;
  3. git reset –hard HEAD^ 三个地方都回复到上一个版本;

    –soft –mixed –hard,会对working tree和index和HEAD进行重置:

    1. git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留工作区,回退commit和index信息
    2. git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
    3. git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
  4. 提交到了github想要撤销撤销,

    1. git reset - -hard  <commit_id>//先恢复到原先版本   
    2. git push origin master  --force // 强行推覆盖错误操作
    3. git reset - -soft <commit_id> //要修改commit的上次

比较

git diff 比较
四种需求:
工作区和暂存区,git diff
暂存区和版本库,git diff - -staged
工作区和版本库,git diff HEAD
当前分支和其他,git diff 分支名
后面可以加文件名
空格开头的是相同的,-是源文件,+比较文件
表示从a的第一行开始的5行变成了b的四行

diff --git a/bdiff.txt b/adiff.txt
index 0ed5a72..0b6a0c6 100644
--- a/bdiff.txt
+++ b/adiff.txt
@@ -1,5 +1,4 @@
-asffffff
+sdfdsfafsds
 fffffff

 aaaaa
-xxxxx

git 解决冲突

远程操作

远程操作都是版本库,和工作区暂存区无关。


1. 先git fetch 获得远程最新情况放入tmp分支 
2. 直接fetch 就更新了origin/master
git fetch origin master:tmp
git diff tmp

git merge origin/Driver_YOULITONG_K502-PM910             //merge
git branch --no-merged   //看看哪些文件没有合并成功
git status > status.info  //将当前的状态信息导入到status.info文件中(搜索unmerged)
less status.info //查看status.info文件中的信息
vi mediatek/config/ztenj75_sz_cu_ics/ProjectConfig.mk   //查看编辑解决冲突,/HEAD回车 查看冲突,下一处 n,删除一行 dd,保
存退出 :x,不保存退出 :q!
git add mediatek/config/ztenj75_sz_cu_ics/ProjectConfig.mk   //上传冲突文件
git commit -m "fix meger"                                    //提交
git merge origin/Driver_YOULITONG_K502-PM910                 //再次merge
git whatchanged                                              //查看修改记录
git push origin  Android_HK_K501_77-W916:Android_HK_K501_77-W91
 // 把本地修改提交到远程服务器上面去

另一种情况是为了修复一些问题,先将暂不提交的代码存起来。完后再继续。
git stash

git stash
do work
git stash pop

rebase 保持主线开发

参考
参考

git pull --rebase,这里表示把你的本地当前分支里的每个提交(commit)取消掉,并且把它们临时 保存为补丁(patch)(这些补丁放到".git/rebase"目录中),然后把本地当前分支更新 为最新的"origin"分支,最后把保存的这些补丁应用到本地当前分支上。

git fetch origim master
git rebase origin/master
git rebase -continue
git push
尽量使用rebase,保持开发主线。
git rebase -i commitID // 修改某些版本的内容/标题 git commit -amemd

只想合并一部分文件

git reset checkout
先git fetch 远端文件。然后checkout得到你想要的文件
git checkout branch_tmp - - filename
这个你想要的文件就到了index区
git checkout branch – filename
维持HEAD的指向不变.用branch所指向的提交中的filename替换暂存区和工作区中相应的文件.会将暂存区和工作区中的filename直接覆盖

git checkout – .或者git checkout .
会取消本地所有修改,相当于用暂存区的所有文件直接覆盖本地文件.

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

查看历史

查看历史 git log —pretty=online filename
git log - - stat 仅显示区分文件
git log –follow -p file 查看一个文件的历史
git show 323445sdiafdsa 查看某次的详细情况
git log -p filename 该文件历史


本地文件忽略

有些文件已经被git管理,这时候可能因为本地环境和线上不同,因此需要修改配置文件但不能上传。每次add都会出现,很烦。
这个分同种情况:a是本地永久忽略,效果的gitignore一样,只不过不适于写到gitignore中而已,可以自己建立一个本地独享的gitignore,然后git config –global core.excludesfile 文件的绝对路径,也可以直接将本地要忽略的文件添加到.git/info/exclude中。不过上述都是针对没有跟踪的文件来说的,如果文件已经被跟踪了你如果在本地想要忽略它的改动,就不能使用以上的方法了。
这正情况b。通俗地讲比如一个编译Android的脚本在其它电脑上都是使用的-j32来编译的,但是你的电脑配置没有别人的好,不能开到-j32,但是这个脚本是已经跟踪过的,你修改了就会在每次的git status中看到。对于这种情况Git有一个忽略改动的方法:

$ git update-index --assume-unchanged /path/to/file #忽略跟踪
$ git update-index --no-assume-unchanged /path/to/file#恢复跟踪
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值