大家好,请帮助一下:是这样的 我和另一个小伙伴进行aps.net mvc的项目开发,但是我们不在同一地点的,于是就选择了开源中国的 git代码托管,但是在这里 出现了一个问题不知道该怎么解决,就是对于master的代码,我和另一个小伙伴都进行了修改,他把最新的版本修改了并推上去了,这里我同时在本地对自己要编写的代码进行了编写,同时也准备push到远程,但是这里有一个问题了,我必须先git pull下来过后才能够进行操作,但是对于pull下来的东西,他不会像本地的版本一样在合并的时候提示哪些地方进行了修改,这里我该怎么解决问题呢?
1.
git log
- 查找你想看的commit,取hash
比如我这里gitlog之后会出现
commit 0623d5bfb3cbf8d3642e56c50482bd4ab60f2f7b Author: ----- Date: Wed Jan 21 12:23:09 2015 +0900 simple makefile commit a23e7a12fefbd48ff15dc32c069fc9a7a90d536c Merge: ace4991 a27c601 Author: ---- Date: Tue Jan 20 15:30:26 2015 +0900 Merge branch 'master' of https://github.com/fasterthanlime/rock commit a27c6017a3934369e485ba65e7d679dabb4b4f89 Merge: 99f91b3 b5c1584 Author: ---- Date: Mon Jan 19 16:34:21 2015 +0100 Merge pull request #858 from davidhesselbom/patch-1 Update AstBuilder.ooc
我想查看第三个commit的diff,只要知道hash,然后
2.
git diff a27c6017
就能看到diff
diff --git a/Makefile b/Makefile index 372ed0b..07dec27 100644 --- a/Makefile +++ b/Makefile @@ -37,19 +37,9 @@ prepare_bootstrap: $(OOC) -driver=make rock.use --outpath=c-source -o=../bin/c_rock -v -pg +-w @echo "Done!" -boehmgc: - $(MAKE) boehmgc-clean - mkdir -p $(VENDOR_PREFIX) - mkdir -p vendor-build - (cd vendor-build && ../vendor/gc/configure --prefix=$(VENDOR_PREFIX) --disable-shared --enable-static && $(MAKE) && $(MAKE) install) - rm -rf vendor-build - -boehmgc-clean: - rm -rf vendor-prefix vendor-build - # For c-source based rock releases, 'make bootstrap' will compile a version # of rock from the C sources in build/, then use that version to re-compile itself -bootstrap: boehmgc +bootstrap: ifneq ($(IS_BOOTSTRAP),) @echo "Creating bin/ in case it does not exist." mkdir -p bin/ @@ -63,7 +53,7 @@ else @exit 1 endif
补充: 当然,如果只有一个hash,默认会和master比较,如果你打算比较两个古老的commit,可以用
git diff hash1 hash2
比如:
INSERT$ git diff 06708026c5bb597e7393d228b03df1fba5728800 a072525591facc740659e25c8e0280f54b6f805f diff --git a/source/rock/middle/algo/typeAnalysis.ooc b/source/rock/middle/algo/typeAnalysis.ooc index 1387cec..1d862fe 100644 --- a/source/rock/middle/algo/typeAnalysis.ooc +++ b/source/rock/middle/algo/typeAnalysis.ooc @@ -129,7 +129,7 @@ findCommonRoot: func(type1, type2: Type) -> Type { if(distance1 == -1 || distance2 == -1) return null - // Pointer vs class type -> Pointer + // Pointer vs clas type -> Pointer if(btype1 instanceOf?(BaseType) && btype1 isPointer() && btype2 getRef() && btype2 getRef() instanceOf?(ClassDecl)) { return _createSugarWith(btype1, type1) } else if(btype2 instanceOf?(BaseType) && btype2 isPointer() && btype1 getRef() && btype1 getRef() instanceOf?(ClassDecl)) { ;
再次更新:
如果是一个远程repo的fork, 你需要一些技巧:
git remote add upstream remoteseveraddress
git fetch upstream
git diff master upstream/master
如果是一个远程repo的clone,那么可以直接:
git diff master origin/master
您好?但是这样在我本地修改了,是远程的冲突啊,我push上去的时候他提示我必须先来下来啊然后再push,您说的这情况是直接在本地两个已经提交的版本之间的比较啊
@凌落: 明白问题了…… 已经更新到了回答的最后面。
@akisann: 我试试哈,亲
@akisann: 相当感谢,目前的问题差不多了,明天继续看看,这个问题已经暂且解决了一些了,谢谢亲
那么问题又来了,我在命令行里面输入 git diff master origin/master过后 在命令行里面就无法正常输入 例如 git add 文件等命令 ,老是在提醒我End 而无法输入了,这个时候该怎么办?谢谢
@凌落: 按q退出……
跟more的操作是一样的啊
@akisann: 还想问一个问题?就是 屏蔽某些不必要的文件 。git 。gitignore 这个 gitignore是文件夹还是文件?就是我进行此操作的时候吧 不晓得该怎么创建也就不知道下一步该怎么弄了
@凌落: 在工程的根目录下创建.gitignore文件,然后按行把你想屏蔽的文件(夹)名写进去就行了
在git log中应该可以看到哪些地方进行了修改
但是在具体的 controller.cs里面看不到呢,他只是提示了那些文件被修改了,但是没指明具体的修改地方,如果是在本地的就能够发现的啊
@凌落: 试试Show changes as unified diff
@dudu: git bash命令 不能输入样啊?
@dudu:我的git是不是 vs里面的插件,是单独安装的呢,
@凌落: 我这个用的不是VS插件,是TortoiseGit
@dudu: 乌龟和GIT?两个插件都用了?
@dudu: 但是那个show changes as unified diff是在哪里使用啊?
@凌落: 在git log中选择相应的文件,然后点击鼠标右键
@dudu: 不行啊,在命令行使用的时候呢
@dudu: 介个:我指的是远程的pull下来,然后再在本地进行合并之前看不到到底具体是那个地方被修改,他只是提到某某文件被修改了呢
@凌落: 试试这里的方法:compare local git branch with remote branch?
@dudu: 那么问题又来了,我如何看新增的文件?,刚才这个解答的比较可以的
@凌落: 试试 git diff --cached --name-only --diff-filter=A
详见:git ls-files: howto identify new files (added, not committed)?
使用SourceTree这种简单的git gui工具吧。。