分享

Git使用笔记

 java_laq小馆 2013-10-24

Git使用笔记

分类: Linux 592人阅读 评论(1) 收藏 举报

声明:
本博客欢迎转发,但请保留原作者信息!
新浪微博:@孔令贤HW;
博客地址:http://blog.csdn.net/lynn_kong
内容系本人学习、研究和总结,如有雷同,实属荣幸!


git config --list 查看系统变量的配置

export https_proxy="http://XXXXXX:XXXXXX@XXXXXX:8080/" 配置代理
密码中的特殊字符转义:
ampersand & (%26)
at @ (%40)
space (%20)
double-quote " (%22)
single-quote ' (%27)
colon : (%3A)

git clone git://github.com/schacon/grit.git mygrit 后面可以自定义要新建的项目目录名称
git status 查看哪些文件当前处于什么状态
git add <file> 将文件添加到暂存区

删除文件:
1、手动删除
2、git rm <filename> (如果要删除之前修改过且已暂存的文件,要加-f)
3、提交
从暂存中移除,但不删除文件:
git rm --cached readme.txt
取消暂存:
git reset HEAD readme.txt
放弃未暂存文件所做的修改:
git checkout -- readme.txt

文件重命名:
git mv <file_from> <file_to> ,相当于:
$ mv README.txt README
$ git rm README.txt
$ git add README


git diff 查看尚未暂存的文件更新了哪些部分
git diff --cached 查看已经暂存起来的文件和上次提交之间的差异

忽略文件
$ cat .gitignore
*.[oa]
!lib.a
temp/
如果文件已经暂存,不会立即使用gitignore的新规则,此时先用git rm --cached filename
也可使用全局的.gitignore文件来对所有的代码库生效,比如新建文件~/.gitignore_global,然后执行:
git config --global core.excludesfile ~/.gitignore_global


提交:
git commit
git commit -m "commit message" 提交
git commit -a -m "commit message" 跳过暂存,直接提交
git commit --amend 重新提交,刚才提交完没有作任何改动,可以重新编辑提交说明,也可以
git add <file>, git commit --amend 增加要提交的文件,只会产生一次提交记录

日志查看:
git log -p展开显示提交的内容差异;-2显示最近两条;--stat,仅显示简要的增改行数统计;
git log --pretty=oneline  每个提交放在一行显示
git log --no-merges  不显示merge的记录
git log --since=2.weeks  查看两周内提交记录,或类似于--since="2008-10-01" --before="2008-11-01"
--grep  搜索提交中的关键字
--author  --committer
图形化工具:gitk

标签:
git tag  列出标签
为先前的提交加标签:
1、git log --pretty=oneline
2、git tag -a v1.2 9fceb02
推送标签到远端仓库:
git push origin v1.2
一次性推送所有标签:
git push origin --tags

git remote -v 查看远程仓库和克隆地址
git remote add [shortname] [url] 添加一个远程仓库
git remote show [remote-name]  显示远端仓库的详细信息
git remote rename old_name new_name  修改远端仓库在本地的简称
git remote rm [remote-name]  移除远端仓库
git fetch [repo] [branch] 抓取远程仓库的更新,但不合并(克隆操作会自动使用默认的 master 和 origin 名字)
git fetch origin branch1  设定当前分支的 FETCH_HEAD' 为远程服务器的branch1分支, 这个操作是git pull origin branch1的第一步
git fetch origin branch1:branch2  
首先执行上面的fetch操作
使用远程branch1分支在本地创建branch2(但不会切换到该分支),
如果本地不存在branch2分支, 则会自动创建一个新的branch2分支,
如果本地存在branch2分支, 并且是`fast forward', 则自动合并两个分支, 否则, 会阻止以上操作
git pull [repo] [branch]  将远端分支自动合并到本地仓库中当前分支
git push [remote-name] [branch-name] 将本地仓库中的数据推送到远程仓库,一个示例(将本地分支提交到远程仓库的另一个分支):git push origin localbranch:remotebranch


分支:

git checkout -b [分支名] [远程名]/[分支名]  创建分支(-d 删除分支,-D 强制删除)

git checkout <branch_name> 切换到分支(-b 新建并切换)
删除远程服务器上的分支:git push origin :<remote_branch>
git merge <new_branch> 将新分支的内容合并到当前分支,如果遇到冲突,可以使用git status查看冲突的文件,手工解决后,git add,比如:
  1. <<<<<<< HEAD:index.html  
  2. <div id="footer">contact : email.support@github.com</div>  
  3. =======  
  4. <div id="footer">  
  5.   please contact us at support@github.com  
  6. </div>  
  7. >>>>>>> iss53:index.html  

git merge --no-ff myfeature  --no-ff标记会使合并永远创建一个新的commit对象,在新的分支中保留myfeature分支的merge记录。


或者使用rebase(衍合):
    git checkout dev
    git rebase master
生成dev分支的patch,在master分支打一遍,使dev成为master分支的直接下游(会修改dev的提交历史),这样,在maste分支执行git merge dev就完成了分支的合并;
git rebase --onto master server client  取出 client 分支,找出 client 分支和 server 分支的共同祖先之后的变化,然后把它们在 master 上重演一遍(暂不合并server分支),然后在进入master分支进行merge操作。
git rebase master server  随后衍合server分支
使用衍合需要注意:旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。如果把衍合当成一种在推送之前清理提交历史的手段,而且仅仅衍合那些尚未公开的提交对象,就没问题。

git branch --merged,查看哪些分支已合并到当前分支
git branch --no-merged,查看那些分支尚未合并到当前分支,此时也可以强制删除分支:git branch -D <branch_name>


假如你想要丢弃你所有的本地改动与提交,可以到服务器上获取最新的版本并将你本地主分支指向到它:
git fetch origin
git reset --hard origin/master


git format-patch  为每个提交生成一个 .patch 后缀的 mbox 文件

应用补丁:

1、对于git diff命令生成的补丁文件,使用git apply,是事务性操作,比patch命令严谨很多 ,可以先用git apply --check查看补丁是否能够干净顺利地应用到当前分支;

2、对于format-patch生成的补丁,使用git am,自动创建提交对象,如果出现冲突:

  1. $ (fix the file)  
  2. $ git add file  
  3. $ git am --resolved 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多