最近为了使用git进行项目管理,整理了一些git相关的操做命令与常见问题合集。php
git教程-廖雪峰css
若是系统中有一些配置文件在服务器上作了配置修改,而后后续开发又新添加一些配置项的时候,java
在发布这个配置文件的时候,会发生代码冲突:git
error: Your local changes to the following files would be overwritten by merge: protected/config/main.php Please, commit your changes or stash them before you can merge.
若是但愿保留生产服务器上所作的改动,仅仅并入新配置项, 处理方法以下:github
git stash git pull git stash pop
而后可使用Git diff -w +文件名 来确认代码自动合并的状况.服务器
反过来,若是但愿用代码库中的文件彻底覆盖本地工做版本. 方法以下:app
git reset --hard git pull
其中git reset是针对版本,若是想针对文件回退本地修改,使用ide
git checkout HEAD file/to/restore
在push代码时出错:svn
$ git push -u origin master To git@github.com:******/Demo.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'git@github.com:******/Demo.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Merge the remote changes (e.g. 'git pull') hint: before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.
是由于远程repository和我本地的repository冲突致使的。post
有以下几种解决方法:
1.使用强制push的方法:
$ git push -u origin master -f
这样会使远程修改丢失,通常是不可取的,尤为是多人协做开发的时候。
2.push前先将远程repository修改pull下来
$ git pull origin master $ git push -u origin master
3.若不想merge远程和本地修改,能够先建立新的分支:
$ git branch [name]
而后push
$ git push -u origin [name]
Pull is not possible because you have unmerged files.
在git pull的过程当中,若是有冲突,那么除了冲突的文件以外,其它的文件都会作为staged区的文件保存起来。
重现:
$ git pull A Applications/Commerce/BookingAnalysis.java A Applications/Commerce/ClickSummaryFormatter.java M Applications/CommerceForecasting/forecast/Forecast.java A Applications/CommerceForecasting/forecast/ForecastCurveProviderCategory.java M Applications/CommerceForecasting/forecast/ForecastProvider.java M Applications/CommerceForecasting/forecast/InputPropertyItem.java ...... A Applications/LocalezeImporter/com/tripadvisor/feeds/SingleMenuLocalezeMatcher.java A Applications/LocalezeImporter/com/tripadvisor/feeds/TypeCategory.java Pull is not possible because you have unmerged files. Please, fix them up in the work tree, and then use 'git add/rm <file>' as appropriate to mark resolution, or use 'git commit -a'.
经过git status你会发现下面古怪的事情:
zhonghua@pts/ttys000 $ git status # On branch sns # Your branch and 'snsconnect/sns' have diverged, # and have 1 and 52 different commit(s) each, respectively. # # Changes to be committed: # # new file: src/config/features_daodao.ini # new file: src/config/services.xml # new file: src/config/svnroot/hooks/mailer.conf # new file: src/config/svnroot/hooks/mailer.py # new file: src/config/svnroot/hooks/post-commit # new file: src/config/svnroot/hooks/pre-commit # new file: src/config/svnroot/hooks/prerelease_notifications.py # new file: src/config/svnroot/hooks/run_checks.py ……. # Untracked files: # (use "git add <file>..." to include in what will be committed) # # _build/ # css/combined/ # css/gen/ # daodao-site.patch # daodao-site.patch1 # js/combined/ # js/gen/ # lib/weibo/ # src/bin/ Pull is not possible because you have unmerged files.
解决:
1. pull会使用git merge致使冲突,须要将冲突的文件resolve掉 git add -u, git commit以后才能成功pull. 2. 若是想放弃本地的文件修改,可使用git reset --hard FETCH_HEAD,FETCH_HEAD表示上一次成功git pull以后造成的commit点。而后git pull. 注意: 3. git merge会造成MERGE-HEAD(FETCH-HEAD) 。git push会造成HEAD这样的引用。HEAD表明本地最近成功push后造成的引用。