查看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
撤销
- git checkout – file可以丢弃工作区的修改(用暂存区替换)
- git reset HEAD file可以把暂存区的修改撤销掉,重新放回工作区状态;
git reset –hard HEAD^ 三个地方都回复到上一个版本;
–soft –mixed –hard,会对working tree和index和HEAD进行重置:
- git reset –mixed:此为默认方式,不带任何参数的git reset,即时这种方式,它回退到某个版本,只保留工作区,回退commit和index信息
- git reset –soft:回退到某个版本,只回退了commit的信息,不会恢复到index file一级。如果还要提交,直接commit即可
- git reset –hard:彻底回退到某个版本,本地的源码也会变为上一个版本的内容
提交到了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
远程操作
远程操作都是版本库,和工作区暂存区无关。
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#恢复跟踪