git相关
进入到想要用git管理的project目录下
1.git init
意即该目录会被git监视一切的变动
同时生成一个.git文件夹下面存放了管理该project的一切必要信息
2.git add <filename>,相应的文件会被git跟踪更改
3.git commit -m 'some commit message'
4.merge all changes to git repository将所有git跟踪的信息都归入到git repository
5.总起来看git监视的目录下的文件有下面几种状态
untracked file
changed but not being staged
对以上两种file 进行 git add操作都会将文件变为changed to be commited状态
changed to be commited
7.我们通过git status查看当前目录下,待处理的文件的状态。
8. git remote -v
查看关联的远端仓库
9. github上新建一个全新的库时,在本地执行git push <remote> <branch>的时候,会将本地的所有文件都上传到github.如果远端库不是一个全新的库,那么需要现在本地执行git pull 将远端和本地文件合并,然后再push才会成功,之后本地的增删改在你push的时候也会被同步到github远端仓库。同理,如果这时你又在github web端进行了一些增删改的操作,那么这时你的push请求同样会被远端拒绝。此外,很自然的,不是任何人都可以push,你需要远端仓库所有者的github帐号密码才可以push,但是任何人的pull请求是允许的。
10. git init --bare repos这种远端裸仓库是不能进行普通的git操作的,也就是说你所有的版本控制操作只能在本地完成,你可以在本地完成版本回退后再进行提交,也就是说虽然你不能直接在远端仓库上进行git操作,但你仍然可以进行版本回退
11. 如何删除一个git init后被git跟踪的目录? 直接删除掉.git文件夹即可,该文件夹默认是隐藏的
12. 用.gitignore忽略的文件夹 后面要加一条斜线 e.g. some/path/ 才表示或略some/path/下面的所有文件
13.git HEAD并不指向提交,他只是指向了分支,而分支则指向了某一个更改的节点, master 或者 dev他们既是分支名,同时也是指针名。
14. git rm 用于删除一个文件,并且git commit这样是真正删除一个文件
15.暂存区的概念,应该说所有的commit都是通过暂存区来转到最终的版本库的,git留下了足够的后悔余地,让你可以把更改提交到暂存区,这时如果你又有了新的更改,你可以把文件从暂存区撤回,或者更新暂存区的文件,其实更改完全可以直接提交到版本库,之所以设计一个暂存区就是为版本库不是那么零碎,你的更改确实是作为一个版本提交的,总之是为你的更改留出了足够的余地
如果你把一个文件提交到暂存区之后,这个文件又发生了改动,这时commit时,新发生的改动是不会提交到版本库的,也就是说,版本库并不直接从工作区获取文件,而是从暂存区stage来获取文件。
16.工作区和暂存区对所有的分支都是一样的,github上的都是版本库,没有工作区和暂存区.
17.使用git pull的时候 git 总是试图合并远程和本地的变更,也就是说远程增加的本地也可以增加的,本地增加的行仍然保留,但不会更新远程的分支,除非再次执行git push,这种情况下使得本地的分支仓库总是远程分支的一个超集,或者说远程分支是本地分支的一个子集,这都是在没有confiict的情况下,如果有conflict的话需要先行处理conflict然后才能merge
18.git 的分支实际上就是一条单向的时间线,除非git merge --no-ff -m "merge with no-ff" dev类似这样使用了--no-ff选项,那么这时会新生成一个commit作为merge后的commit。ff=fast forward
19.git revert反转提交,实际上这也是一次提交,这样你之前的一次提交也作为一个版本被保存下来
20.git stash 可以暂存本地工作区,这样pull的时候就不会发生冲突,当调用
git merge --strategy-option theirs 一次性合并多个
git pull -Xtheirs同上
git stash pop stash@{0}的时候,暂存的内容又被释放出来,这时git会提示冲突,并且需要手动修改冲突的部分来确保合并成功wen
对于二进制文件的冲突你可以选择
git pull
git checkout --theirs YOUR_BINARY_FILE or git checkout --theirs .|*批量检出
// git checkout --ours YOUR_BINARY_FILE
git add YOUR_BINARY_FILE
git commit -m 'merged with the remote repos.'
git push
还可以选择 git checkout -f强制合并
21.git reset HEAD file可以把文件重新放回工作区
22.git diff --name-only --diff-filter=U 这会列出所有冲突的文件
23.git merge时候的冲突是指已经commit到仓库的文件的冲突, unstaged以及staged文件都不在此列
24.git diff --cached|staged意思是查看当前staged的文件
25.git pull会影响暂存区和本地仓库,或者说会更新本地仓库(在没有conflict的情况下)
26.git push同样会引起冲突,如果远程的文件发生改动或者因为别的push 造成push冲突
27.git reset HEAD file 从暂存区撤回文件
git checkout -- file 从暂存区或者版本库撤回文件,为什么这么说,因为如果暂存区有相应的文件则优先从暂存区检出,如果没有,那么就从版本库检出,如果一定要从版本库检出,那么先用git reset HEAD file将文件从暂存区撤回,再调用git checkout -- file就可以直接从版本库里检出相应的文件了
28.git 比较
git diff 比较的是工作区和暂存区的差别
git diff --cached 比较的是暂存区和版本库的差别
git diff HEAD 可以查看工作区和版本库的差别
29. revert比reset更加温柔一点,回滚到某次commit且该commit之后的提交记录都会保留,并且会在此基础上新建一个提交
实际实验也是这样git commit 会重置暂存区和工作区
30.git stash可以将工作区藏起来
git stash pop 恢复工作区 ,git stash list git stash clear
git stash 会把暂存区的内容保存起来,未在暂存区中,但已经被更改的文件,在pop的时候会一并放到暂存区中
31.根据试验的结果git rm 的结果是将文件从版本库放回到暂存区 git reset HEAD file
git reset HEAD~1 和 git revert HEAD~1中 HEAD~1的含义是不同的,reset中指的是后退到倒数第二个版本,revert 中指将倒数第二个版本的更改撤销掉
因为git revert会生成新的一次提交,所以有可能会造成冲突 git 保持在reverting 状态,类似于git 的merging状态,需要手动处理冲突之后再行提交
32.git reset --hard和git reset 是不一样的,git reset --hard在进行版本切换的同时会将工作区和暂存区清空,但是--soft会保留暂存区的内容
33.git revert --continue --abort 会终止或者继续当前的合并
34.git merge的时候比较有意思,他默认采取的是fast-forward的方式,如果比较master和dev的分支头部之后,只是dev发生了增加那么合并的时候就直接将master指针指向dev当前的提交,如果使用 git merge --no-ff -m 'sdsd' dev就会产生两个提交,一个是master和dev合并之后的,另一个是当前dev的提交 这样分支的提交信息就会被保留下来。
35.git rebase 假如你对dev分支执行git rebase, 那么这条分支上的所有过往的提交都会被抛弃,并把这些提交的更改暂存起来,然后将他们应用到当前dev 的commit上,这个过程可能产生多个提交,因为前面暂存的那些更改并不是打包在一起的,而是和丢弃掉的commit是一个个对应的
36. git blame 文件逐行追溯
37. git push 的时候默认是不允许往当前工作分支push的,除非这是一个bare repo, 这话同时也意味着你可以往非工作分支push, 比如dev分支, 只要不是当前工作分支即可
38. windows下面有时候需要免密码提交,如果用Totorise当然就没有这些问题了,如果用bash 命令行pull或者push就需要保存rsa密钥对, 具体就是创建一个HOME/.ssh/id_rsa的文件用来保存自己的私钥,并在远程主机上的authorized_key中保存相应的公钥
39. ssh总是区分通信的两端的角色的,也就是说,如果一条通信链路建立,那么一定有一端是客户端,另一端是服务端, known_hosts中保存的密钥指纹是用来做client的时候使用的
git相关的更多相关文章
- Git相关安装包打包下载
Git相关软件偶尔需要***才能下载,故分享于此 1.Git-2.15.0-64-bit.exe 2.TortoiseGit-2.5.0.0-64bit.msi 3.TortoiseGit-Langu ...
- git相关整理
title: git相关整理 toc: false date: 2018-09-24 20:42:55 git merge 和 git merge --no--ff有什么区别? git merge命令 ...
- git 相关流程和报错解决
git 相关流程: 预先配置: gitroot $ git config user.name XXXgitroot $ git config user.email XXX@XXX.com git re ...
- git相关操作
git相关命令 基本操作 git init git add xxx git commit -m "first commit" git tag -a V1.0 -m '我的标签' g ...
- git 相关
github入门 一.先了解 相比CVS\SVN优势: - 支持离线开发,离线Repository- 强大的分支功能,适合多个独立开发者协作- 速度快 github 本地有仓库,储存着所有repo ...
- Git相关操作汇总
git clone: 正如上图,当我们打开终端的情况下,默认我们所在的目录是在/home/shiyanlou的,大家可以在终端输入以下命令把目录切换到桌面cd /home/Desktop这个时候输入 ...
- git 相关学习
1.Git 的一些快捷键 第一次创建本git 本地仓库 :: git init //在本地创建一个 Git仓库 :要在该目录下 第一次 要配置GitHub 的 账号和邮箱: git config ...
- Git相关内容
先聊一点关于gitlab的内容和github的内容 Gitlab和GitHub,都是我们可以存放代码库的地方.不过Gitlab可以免费的存储私人代码,GitHub需要花钱才能够存储私人代码库,不过我想 ...
- Git相关命令教程
一.在GitHub上创建新项目 (1)在GitHub首页 “New repository”,创建新版本库“test” (2)在本地使用GitBash,将repository clone到本地 git ...
- git相关操作。
之前只会用图形端的GIT中,命令行的比较陌生,整理下,供自己以后参考 关键的名词: 工作区:工作区 Index / Stage:暂存区 仓库:仓库区(或本地仓库) 远程控制:远程仓库 到项目目录下gi ...
随机推荐
- 响应式 css
1.class 样式一般用class,命名:中横线分隔,如:div-logo id 一般用于js快速地区别和获取元素,命名:驼峰命名法,如:divLogo (中间首字母大写) 2.必不可少的图片,用& ...
- 关于JSPatch热修复
今天和同事聊到JSPatch热修复,我们来看下JSPatch,确实解决了APP升级的痛点. 刚好,已经有这么一个第三方平台实现了后台管理,全套服务(网址是:http://jspatch.com/),先 ...
- Android 广播机制概论
Android 中的每一个应用程序都可以对自己感兴趣的广播进行注册,这样,该程序就只会接收到自己所关心的广播内容,这些广播可能是来自于系统的,也可能是来自于其他应用程序. 广播分为2种: 1.标准广播 ...
- python核心编程第六章练习6-14
随机数.设计一个“石头.剪子.布”游戏,有时又叫“Rochambeau”,你小时候可能玩过,下面是规则.你和你的对手,在同一时间做出特定的手势,必须是下面一种:石头.剪子.布.胜利者从下面的规则产生, ...
- MultiDex到底有多坑
google为什么要引入MultiDex? dex指令是用16位寄存器来保存dex中的方法数,所以限制了在apk 中最大的方法数为65535,当超过这个最大值在编译的时候会报 方法数超标的错误. 如何 ...
- hive踩过的小坑
上周使用hive做一些操作,几个小问题纠结很久.特此记录下: hive概念 hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以 ...
- VMWARE + CENTOS在windows下配置cocos2d-x android开发环境
VMWARE + CENTOS在windows配置cocos2d-x android开发环境 之前使用cygwin在windows开发android,后来使用了c++11特性,在cygwin中更新工具 ...
- windows上安装numpy,scipy
题外话:本来按照python官方的设计,可以直接使用easy_install或者pip在线安装各个组件,但是国内的网络你懂得!老老实实下载文件本地安装吧. 1.安装windows 的python 2, ...
- java开发前奏
做java开发当然少不了jdk(java开发工具),那么今天就介绍一下jdk的安装和配置. JDK官网下载地址(建议去官网下载,免费的) http://www.oracle.com/technetwo ...
- Topcoder SRM583 DIV 2 250
#include <string> #include <iostream> using namespace std; class SwappingDigits { public ...