项目开发过程中常见的git问题以及解决方式,例如两笔修改之间的差异 撤销本地修改 更新别人的临时修改到本地 然后重新提交到服务器 解决冲突 git pull下载远程仓库失败等等
【1】、查看历史日志
$git log #详细的包括提交用户、日期、提交内容
$git log --oneline #日志太多时,可使用单行方式查看
【2】、查看‘已修改的、但未通过add命令添加到index索引区的文件’与本地git仓库的差异
$git diff #当查看内容太多时,随时可以按‘q’键退出
或者
$git diff > ./out/gitdiff.txt #变更较大时,查看gitdiff.txt文件。发补丁可以用这种方式
该命令显示工作目录和上次提交间的差异;这些内容在运行 "git add <file...>"命令时就会被暂存到index区。
【3】查看任何两个提交(commit)记录之间单个文件的差别
$git log --oneline
493079a 提高xxxx功能
73cfbc5 解决xxxx异常问题,xxxxx选项
920f644 更新所xxxx接口适应android4.0系统,包括ak4183,cdtctp1010,ft5406,pixcir等
f7a3b5f 创建xxxxxx内核工程
$git diff 73cfbc5 493079a xxx/include/xxxxx_env.h #比较73cfbc5和493079a两个commit之间单个文件
【4】、查看‘已经通过add命令添加到index索引区的文件(commit将要提交的文件)’与本地git创库的差异
$git diff --cached
该命令显示当前的索引和上次提交间的差异;这些内容在运行 "git commit -m"命令时就会被提交。
【5】、更新已经修改测试OK的驱动文件到index跟踪索引
$git add <files...> #<files...>为已经修改测试OK的驱动文件列表,可以有多个
$git status
【6】、发现刚才通过add命令更新的文件还需要进一步修改,想取消刚才的‘add’动作(即取消index索引暂存)
$git reset HEAD <files...>
$git status
【7】、发现工作目录中的编辑修改的文件不理想,想恢复到修改前的状态(即本地仓库里文件状态)
$git checkout -- <files...>
$git status
【8】、将index跟踪索引内容提交到本地git仓库
$git status
$git commit -m "你的版本更新信息(可以使用中文)"
$git status
【9】、比较任何两个提交(commit)记录之间的差别
$git log #先git log查看更新记录
commit 89cdc80a98e8ae80c0911c3d12e3aeb3123684dc
Author: xxxxxxx <xxxxx@xxx.com.cn>
Date: Thu Feb 2 17:48:20 2012 +0800
解决xxx录音声音小的问题
commit ea75b2c891c8eb47455c5ec88147f45d8dd8fcc7
Author: xxxxx <xxxx@xxxx.com.cn>
Date: Thu Feb 2 17:35:20 2012 +0800
解决xxxx相机为录像时,前置摄像头切换到后置摄像头时,会出现花屏
commit 430806251ccd178e79c102508b68828a0cbaced6
Author: xxxx <xxxx@xxxx.com.cn>
Date: Thu Feb 2 14:56:41 2012 +0800
Create for rk29 android4 sdkv210 kernel
$git diff ea75b2c 4308062 #选择要对比的两个版本,对应commit栏前7位字符即可,这里选最早的两个版本为例
diff --git a/xxxx/camera/xxxxx.c b/xxxx/camera/xxxxx.c
index fc7e219..437f109 100755
--- a/xxxx/camera/xxxxx.c
+++ b/xxxx/camera/xxxxx.c
@@ -48,11 +48,11 @@ module_param(debug, int, S_IRUGO|S_IWUSR);
#define SENSOR_ID 0x92
#define SENSOR_MIN_WIDTH 176
#define SENSOR_MIN_HEIGHT 144
-#define SENSOR_MAX_WIDTH 1280//1600
-#define SENSOR_MAX_HEIGHT 720//1200
-#define SENSOR_INIT_WIDTH 1280//1600 /* Sensor pixel size for sensor_init_data array */
-#define SENSOR_INIT_HEIGHT 720//1200
-#define SENSOR_INIT_WINSEQADR sensor_sxga//sensor_uxga
+#define SENSOR_MAX_WIDTH 1600
+#define SENSOR_MAX_HEIGHT 1200
+#define SENSOR_INIT_WIDTH 1600 /* Sensor pixel size for sensor_init_data array */
+#define SENSOR_INIT_HEIGHT 1200
+#define SENSOR_INIT_WINSEQADR sensor_uxga
#define SENSOR_INIT_PIXFMT V4L2_MBUS_FMT_UYVY8_2X8
$git log
【10】、同步服务器git仓库到本地仓库时,遇到冲突的解决办法
$git pull
zhangsan@192.168.1.1's password: sos123
... 如有CONFLICT冲突提示:Automatic merge failed; fix conflicts and then commit the result.....
...手动解决版本合并问题 ...
$git add <files...> #修改完冲突文件后重新更新冲突的文件,*没有冲突时不需要该步骤*
$git commit -m “使用张三的修改方法” #重新提交引起冲突的文件,*没有冲突时不需要该步骤*
$git status #查看状态
$git log
【11】、git-pull下载远程仓库失败,是由于本地仓库有修改未提交、或者冲突造成,比如:
$git pull
$git status
# On branch master
# Your branch is behind 'origin/master' by 1 commit, and can be fast-forwarded.
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: xxx/include/xxxx.h
#
no changes added to commit (use "git add" and/or "git commit -a")
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
以上错误时由于本地工作目录修改了wisky/include/wisky_env.h文件而未提交造成,有两种解决办法:
a、wisky_env.h的修改是有用修改且通过测试验证OK,则先提交该文件
$git add xxx/include/xxx.h
$git commit -m "请填写修改信息"
b、xxxx.h的修改是无用修改,则可以先恢复该文件到未修改状态(本地仓库状态)。
$git checkout -- xxx/include/xxxx.h
$git status
在以上步骤后,这时候可以再次使用git-pull正常同步代码了:
$git pull
$git status
【12】、列出两个提交之间不同的文件路径名:
$git log db82fae...aa929a5 --stat
或者
git diff db82fae..aa929a5 --stat
【13】、修改最后一次提交
有时候我们提交完了才发现漏掉了几个文件没有加,或者提交信息写错了。想要撤消刚才的提交操作,
可以使用 --amend 选项重新提交:
$git commit --amend
此命令将使用当前的暂存区域快照提交。如果刚才提交完没有作任何改动,直接运行此命令的话,
相当于有机会重新编辑提交说明,但将要提交的文件快照和之前的一样。启动文本编辑器后,会
看到上次提交时的说明,编辑它确认没问题后保存退出,就会使用新的提交说明覆盖刚才失误的提交。
如果刚才提交时忘了暂存某些修改,可以先补上暂存操作,然后再运行 --amend 提交:
$git commit -m 'initial commit'
$git add forgotten_file
$git commit --amend
上面的三条命令最终只是产生一个提交,第二个提交命令修正了第一个的提交内容。
【14】、储藏当前的工作状态到stash储藏区
当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你这时候想
通过git pull命令更新远程服务器上的一些重要更新到本地,发现无法通过,这是由于服务
器上有些文件与你的工作目录中修改文件不一致造成的。解决这个问题的办法就是先通过git stash命令
储藏你的当前工作,将修改过的被追踪文件和暂存变更保存到stash堆栈中,git-pull完成后随时
可以恢复先前状态继续工作。
操作示例如下:
1、暂存当前工作状态
$git status #查看工作目录中文件修改状态
# Changes not staged for commit:
# modified: init/main.c
# modified: usr/gen_init_cpio.c
$git pull #想更新远程仓库合并时Git发现某个文件与工作目录不相同会提示,并放弃合并
error: Your local changes to the following files would be overwritten by merge:
init/main.c
这时候如果不想放弃你工作目录中的修改,可以通过git stash储藏你的当前状态到堆栈中:
$git stash
或者
$git stash save "message信息备注" #message信息可以添加备注
$git status #储藏后再查看你的工作目录就干净了
2、在储藏完成后就可以再次git pull进行更新了
$git pull
$git log --oneline
3、更新完后,需要恢复你之前储藏到堆栈中的工作状态
先要查看现有的储藏,你可以使用git stash list命令:
$git stash list
stash@{0}: WIP on master: 049d078 user1 changed main.c
stash@{1}: WIP on master: c264051 add touch screen driver
stash@{2}: WIP on master: 21d80a5 create git test project
在这个示例中,之前已经进行了两次储藏,所以你可以看到三个不同的储藏。
如果你想应用更早的储藏,你可以通过名字指定它,像这样:git stash apply --index stash@{2}。
如果你不指明,Git 默认使用最近的储藏并尝试应用它:
$git stash apply --index
Auto-merging init/main.c
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: init/main.c
# modified: usr/gen_init_cpio.c
选项apply只尝试应用储藏的工作——储藏的内容仍然在栈上。要移除它,
你可以运行 git stash drop,加上你希望移除的储藏的名字:
$git stash list
stash@{0}: WIP on master: 049d078 user1 changed main.c
stash@{1}: WIP on master: c264051 add touch screen driver
stash@{2}: WIP on master: 21d80a5 create git test project
$git stash drop stash@{0}
Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)
除了git stash apply命令,你也可以运行git stash pop来重新应用储藏,并同时立刻将其从堆栈中移走。
之后你就可以继续进行原先的调试修改工作了。
总结起来就是三个命令组合: git stash + git pull + git stash apply --index
给你个网址自己学,https://www.liaoxuefeng.com/wiki/896043488029600
【相关推荐】
只需要将目前最新的代码报错本地缓存空间中