git笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了git笔记相关的知识,希望对你有一定的参考价值。

在tortoisegit的设置里,在git的选项下面的git loacl .git/config里加入可以不用再次输入用户名和密码:
 [credential]    
    helper = store    
git config --global credential.helper store
 
error occurred during unpacking on the remote end: index-pack abnormal exit
当出现上述错误时,不是因为git配置有问题,而是提交的文件可能存在其它问题,这时再将要推送的文件右击”重置master到这个版本“即可解决
另外拉取或获取的时候要保证远端url的正确性!
选择丢弃的时候会无条件还原本地文件的更改
选择还原此版本做出的更改会还原所选的文件(如果是新增则是删除)
技术分享
 
文件状态:
技术分享
对应:1、已修改,2、未修改,3、新文件加入跟踪至暂存状态,4、未受版本控制状态。
技术分享
功能解释:
拉取(pull|更新本地的远程分支):无条件无预览把远端文件直接下载到本地进行合并
获取(fetch):只获取服务器文件可以用于比较预览而不下载到本地
获取变基(fetch&rebase):http://blog.csdn.net/witsmakemen/article/details/22661605
更新远端(remote update)
清理过时的远端分支()


恢复丢失的版本 ! K; Z$ y) y  Q, D9 G; ~5 f( E
丢失版本最常见的问题就是 比如使用了 git reset –hard HEAD^ 之类的操作,结果发现丢弃的版本还想恢复回来,但是已经没有任何分支


能够reference到这个commit了。幸运的是,git 对各个分支的head还有一份log记录叫做reflog,你可以在.git/logs/refs/heads/ 目录下


看到它们。 通过 git reflog 可以显示变更历史。使用类似 [email protected]{1} [email protected]{“2 days ago”}之类的格式,就能索引到你想要的commit


。例如对应于git reset –hard HEAD^ 使用 git reset –hard [email protected]{1}即可恢复到reset之前的commit上。* K. R! {. I0 L. z7 r/ F" }


出现 * (no branch)的处理 5 Q) O1 H8 M4 ~% T# k* m* R+ ~: W
如果当前正工作在 (no branch)上:
$ git checkout -b working,就会把(no branch)上的东西checkout到working分支
如果不小心从(no branch)branch切换到其他分支了,用git log不能查找到(no branch)的信息,不要担心,先用git reflog查到(no 


branch)的commit,然后:
$ git branch -b backup commit3 d‘ O1 v2 K* L; `9 U$ k2 q! Z: L% @
- ?0 M) W( c; j) W: Q) i
Git push,merge,pull,fetch,rebase各自在什么情况下使用 * `3 D: ]3 C& v9 z5 g* y) d
Git push:用本地的refs更新远程的refs。比如从远程的git repository中clone了一个副本,在此基础上做了一些修改,然后用git push将


你的修改更新到远程,前提是要有远程的写权限。1 `5 ^2 I" r0 J
. k/ l8 S/ Y) T4 W& }
Git merge:合并不同的分支,详细看git merge 合并分支
. K! X3 C2 x3 ~3 ^& l+ e% f- M# o
Git pull:从另一个repository中fetch并且merge到一个本地分支,比如从远程的git repository中clone了一个副本,过了一段时间,远程


的版本可能已经更新,用git pull将远程的更新fetch并且merge到当前分支。


Git fetch:详细看,git fetch 从另一个repository中下载objects and refs


Git rebase:详细看,git-rebase 跟上游分支同步


提交问题
提交的“日志信息”栏里面一定要手动输入若干信息,signed-off-by添加的不管用




gitdos下操作:


http://blog.csdn.net/wangjia55/article/details/8802490


git自行整理(善用提示,懂提示):
git add *  增加当前目录修改的文件
git add . 会递归当前目录所有子目录及文件
git status 
git commit 文件名 -m "注释"
git push 
git reset head 文件名 也可以git reset . [*]表示还原当前所有
git rm 移除文件
other:
touch 文件名  增加文件


你当然不想把一些配置文件等commit到服务器上去吧?可以在本地项目根目录中建立.gitignore文件来忽略一些文件和目录:
比如:
/system/*   #忽略根目录system下所有文件
/application/config/*  
/admin/application/config/*


只能或略没有与git打过交道的文件,否则需要重新从git远端删除再执行忽略


使用sourcetree方便管理git项目


有冲突的时候,先贮藏, git stash, git pull git stash pop还原贮藏区内容,最后解决冲突,使用tortoise的时候先现有,再远端(贮


藏区自己的东西)


Please move or remove them before you can merge.
git clean  -d  -fx ""
其中 
x  -----删除忽略文件已经对git来说不识别的文件
d  -----删除未被添加到git的路径中的文件
f  -----强制运行


http://www.cnblogs.com/hydah/archive/2012/04/10/2440220.html


git  分支互动条件下  ,清理.settings之类的文件   最后不要切换分支 如果有冲突,则直接pull  
还有远程删除文件预览 git rm -r -n --cached  */src/\\*    最好是去掉src前面的*/ 号可以匹配到
熟练使用git命令 git add xxx.xxx不需要加后面参数(一般情况下)
git commit xxx.xxx -m "beizhu" 
最后git push origin "branch"   matster
git pull origin master (origin master )有时候很有必要加上
最最后就是合并了 。。。。
所谓的merge  ,就是切换到需要“小文件”的分支,然后执行merge命令,执行完毕后在commit并推送
合并完成后在被合并的小分支上需要add并commit ,commit的时候可能会遇到
fatal:cannot do a partial commit during a merge 错误 解决办法:git commit -a  (提交全部)








git merge 问题
如果产生本地文件修改(unlink错误),使用checkout -文件方式还原
如果提示exits,直接删除即可,命令:rm -f ./.git/index.lock
....








https://segmentfault.com/q/1010000000156026
官方文档有句话“切换分支的时候最好保持一个清洁的工作区域。”,不知道我的理解是不是正确的。如果你当前分支有修改,但是还没有


commit,如果你要切换分支的话,最好就是把内容都commit了?还是只用add到暂存区,下次回来可以继续。
 
我推荐你用git stash 暂存起来,切换回来的时候用git stash apply重新获取刚才的变更。切换的时候给你一个干净的工作目录:)
2012年12月26日回答 评论


jesse_91889
353 声望
答案对人有帮助,有参考价值2答案没帮助,是错误的答案,答非所问
有如下几种处理方式:
1. add并且commit,再checkout,提交到当前分支
2. add但不commit,可以stash,然后checkout回来之后stash apply,在commit,提交到当前分支
3. add但不commit,也不stash,直接checkout,然后再commit的话,记录就在切换分支下面。


其背后的原因:一个本地的git repo只有一个工作区和暂存区,但是有多个分支的提交区,而我们的checkout只是将HEAD指针从一个分支切


换到另一个分支。
技术分享
 


小乌鱼forever
31 声望
答案对人有帮助,有参考价值


答案没帮助,是错误的答案,答非所问
如果你当前分支有修改,但是还没有commit,如果你要切换分支的话,最好就是把内容都commit了?
不是,因为你的change还不一定ready for commit,根据你的实际情况,你可以git stash暂存,你可以commit生成一个新的提交,你也可以git checkout -f强制切换分支
2013年01月28日回答 1 评论

loveky
37 声望
答案对人有帮助,有参考价值答案没帮助,是错误的答案,答非所问
没有进行commit并切换分支,当前文件还在缓冲区。
不是对当前Git版本,进行提交。
在任意分支下还可reset修改或commit.

测试

全选复制放进笔记git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status

git br a
git br
git br b

git co a
touch a.py
git add .

git co b
git st
git add .
git commit -m ‘add a.py file‘
git st

当前文件就回出现b分支下
如果这样,退回上次commit
git reset --hard
add 即是暂存 git stash git purpos....
git忽略文件之再次笔记
这个是全文件名:.gitignore
添加的时候用伪linux命令vim或touch添加
然后在里面以行为单位进行文件规则过滤,记得不要遗漏点

 
 
技术分享

以上是关于git笔记的主要内容,如果未能解决你的问题,请参考以下文章

Git学习笔记

Git学习笔记

Git学习笔记4

Git 学习笔记

git 笔记

git学习笔记