本人刚接触git,根据一些视频和百度的查到的一些关于git与项目结合的资料,也遇到了一些坑,为了防止今后万一长时间不接触而遗忘,特写此博客,方便今后某天回头来温习。
注意:纯新手手记,文章后面并对一些个人觉得有用的博客进行了转载,只为了今后遗忘某些东西的时候,方便阅读和学习,有很多不足之处,还望见谅。
环境:windows10 系统
git使用前准备(git安装与SSH配置)
下载git 官网https://git-scm.com/,windows系统会附带下载git-bash应用程序文件
若是在IDEA上使用,需将terminal终端整合成git-bash,这样会更加方便操作,以下图片为配置所在地:
点击git-bash,输入以下命令
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
在安装git时,已设置了git的配置,上处是修改git用户名和邮箱的命令。在码云或者github上创建自己的项目,并配置私人公钥
创建SSH Key 的命令行为
$ ssh-keygen -t rsa -C "username"
用户名要跟之前设置的gitconfig中的用户名一致。
进入相应目录查看公钥文件id_rsa.pub,windows中的地址:C:\Users\LENOVO\.ssh。
用记事本打开,将公钥复制。然后粘贴到码云或者github中配置私人公钥处,从而生成私人公钥,由于私人公钥权限相比项目公钥权限大,所以生成私人公钥。
创立自己所需要的目录结构,其中.gitignore是git中一个必要的文件,远程仓库将不会追踪.gitignore文件中所声明的文件,既不会将.gitignore中所提及的文件和目录提交到远程仓库,根据个人需求进行设置
忽略文件原则
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
语法规范(熟悉正则很容易理解)
- 空行或是以#开头的行即注释行将被忽略;
- 以斜杠 “/” 结尾表示目录;
- 以星号 “*” 通配多个字符;
- 以问号 “?” 通配单个字符;
- 以方括号 “[]” 包含单个字符的匹配列表;
- 以叹号 “!” 表示不忽略(跟踪)匹配到的文件或目录;
- 可以在前面添加斜杠 “/” 来避免递归.
git常用操作步骤
首先我们可以将创建的项目克隆到本地,进入自己想要放置项目的文件夹,命令行如下:
git clone git@github.com:git_username/repository_name.git
初始化git
git init (输入此命令,本地将生成.git文件)
输入 git status 可以看出项目中有哪些文件发生了变化,这些变更文件等待验证追踪
将变化了的文件进行追踪,输入命令为:
git add .(注意add后面含空格)意思为添加所有变更文件,将这些文件都进行追踪
再将追踪验证后的文件进行提交,提交到本地仓库,输入的命令行为:
git commit -am '注释内容' (加 am 意思后面直接加注释)
将本地仓库与远程仓库进行关联,命令为:
git remote add origin git@github.com:git_username/repository_name.git
将本地的推送到远程仓库上,命令为
git push -u origin master
若出现以上情况,需先执行:git pull 将分支上的文件拉取下来,一般第一次git项目都需要先pull下来代码
然后再执行 git push -u origin master
若出现以上情况,则是我们创建的分支没远程分支新,需进行强制推送
git push -u -f origin master
由于项目刚创立,里面什么都没有,需要将master进行覆盖。
创立分支
git checkout -b 分支名 origin/ master(checkout 是检出,-b 创建分支, origin/master意思是在master基础上生成一个分支)
推送分支
git push HEAD origin -u
git中本地与远程仓库的关联与取消
1.在本地目录下关联远程repository :
Git remote add origin git@github.com:git_username/repository_name.git(即码云或github上创建项目后生成的SSH 复制链接)
2.取消本地目录下关联的远程库:
git remote remove origin
接下来是一些他人原文的引荐(此处粘贴是为了方便学习,并附带原文地址):
windows使用git时出现:warning: LF will be replaced by CRLF
windows中的换行符为 CRLF, 而在Linux下的换行符为LF,因为Git的换行符检查功能,所以在执行add . 时出现提示,解决办法:
core.safecrlf
git提供了一个换行符检查功能(core.safecrlf
),可以在提交时检查文件是否混用了不同风格的换行符。这个功能的选项如下:
false
- 不做任何检查warn
- 在提交时检查并警告true
- 在提交时检查,如果发现混用则拒绝提交
建议使用最严格的 true
选项。
core.autocrlf
假如你正在Windows上写程序,又或者你正在和其他人合作,他们在Windows上编程,而你却在其他系统上,在这些情况下,你可能会遇到行尾结束符问题。这是因为Windows使用回车和换行两个字符来结束一行,而Mac和Linux只使用换行一个字符。虽然这是小问题,但它会极大地扰乱跨平台协作。
Git可以在你提交时自动地把行结束符CRLF转换成LF,而在签出代码时把LF转换成CRLF。用core.autocrlf
来打开此项功能,如果是在Windows系统上,把它设置成true
,这样当签出代码时,LF会被转换成CRLF:
$ git config --global core.autocrlf true
linux或Mac系统使用LF作为行结束符,因此你不想 Git 在签出文件时进行自动的转换;当一个以CRLF为行结束符的文件不小心被引入时你肯定想进行修正,把core.autocrlf
设置成input来告诉 Git 在提交时把CRLF转换成LF,签出时不转换:
$ git config --global core.autocrlf input
这样会在Windows系统上的签出文件中保留CRLF,会在Mac和Linux系统上,包括仓库中保留LF。
如果你是Windows程序员,且正在开发仅运行在Windows上的项目,可以设置false
取消此功能,把回车符记录在库中:
$ git config --global core.autocrlf false
原文:http://blog.youkuaiyun.com/feng88724/article/details/11600375
一些git分支操作
1、创建本地分支 local_branch
Git branch local_branch
2、创建本地分支local_branch 并切换到local_branch分支
git checkout -b local_branch
3、切换到分支local_branch
git checkout local_branch
4、推送本地分支local_branch到远程分支 remote_branch并建立关联关系
a.远程已有remote_branch分支并且已经关联本地分支local_branch且本地已经切换到local_branch
git push
b.远程已有remote_branch分支但未关联本地分支local_branch且本地已经切换到local_branch
git push -u origin/remote_branch
c.远程没有有remote_branch分支并,本地已经切换到local_branch
git push origin local_branch:remote_branch
5、删除本地分支local_branch
git branch -d local_branch
6、删除远程分支remote_branch
git push origin :remote_branch
git branch -m | -M oldbranch newbranch 重命名分支,如果newbranch名字分支已经存在,则需要使用-M强制重命名,否则,使用-m进行重命名。
git branch -d | -D branchname 删除branchname分支
git branch -d -r branchname 删除远程branchname分支
7、查看本地分支
git branch
8、查看远程和本地分支
git branch -a
原文为:http://blog.youkuaiyun.com/hijiankang/article/details/47254179
Git push与git pull是一对推送/拉取分支的git命令。
git push 使用本地的对应分支来更新对应的远程分支。
- 1
- 1
注意: 命令中的本地分支是指将要被推送到远端的分支,而远程分支是指推送的目标分支,即将本地分支合并到远程分支。
如果省略远程分支名,则表示将本地分支推送与之存在”追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
- 1
- 1
上面命令表示,将本地的master分支推送到origin主机的master分支。如果后者不存在,则会被新建。
origin是一个远程厂库地址。
如果省略本地分支名,则表示删除指定的远程分支,因为这等同于推送一个空的本地分支到远程分支,这条命令是删除远程master分支。
- 1
- 2
- 3
- 1
- 2
- 3
上面命令表示删除origin主机的master分支。
如果当前分支与远程分支之间存在追踪关系(即分支名相同),则本地分支和远程分支都可以省略。
- 1
- 1
上面命令表示,将当前分支推送到origin主机的对应分支。
如果当前分支只有一个追踪分支,那么主机名都可以省略。
- 1
- 1
如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样后面就可以不加任何参数使用git push。
- 1
- 1
上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了。
不带任何参数的git push,默认只推送当前分支,这叫做simple方式。此外,还有一种matching方式,会推送所有有对应的远程分支的本地分支。Git 2.0版本之前,默认采用matching方法,现在改为默认采用simple方式。如果要修改这个设置,可以采用git config命令。
- 1
- 2
- 3
- 1
- 2
- 3
还有一种情况,就是不管是否存在对应的远程分支,将本地的所有分支都推送到远程主机,这时需要使用–all选项。
- 1
- 1
上面命令表示,将所有本地分支都推送到origin主机。
如果远程主机的版本比本地版本更新,推送时Git会报错,要求先在本地做git pull合并差异,然后再推送到远程主机。这时,如果你一定要推送,可以使用–force选项。
- 1
- 1
上面命令使用–force选项,结果导致在远程主机产生一个”非直进式”的合并(non-fast-forward merge)。除非你很确定要这样做,否则应该尽量避免使用–force选项。
最后,git push不会推送标签(tag),除非使用–tags选项。
- 1
- 1
git pull 获取并合并其他的厂库,或者本地的其他分支。
git pull 与 git push操作的目的相同,但是操作的目标相反。命令格式如下:
- 1
- 1
例如:
- 1
- 1
上面的命令是将origin厂库的master分支拉取并合并到本地的my_test分支上。
如果省略本地分支,则将自动合并到当前所在分支上。如下:
- 1
- 1
注:如果你想参与github上的一些优秀的项目,则下面提供一个通用的例子:
首先,需要一个github的账号,并fork一个你感兴趣的repository。
下面描述过程中会涉及两个远程主分支,为了很好的区别,我们把fork出来的主分支称为远程A repository,本fork的分支称为远程B repository
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
然后在github web界面上将my_test分支合并到你需改的远程B repository 分支上。等待管理员review,如果有问题,就继续在develop分支当修改,并commit –amend,在之前的commit上修改。知道被meger。
原文:http://blog.youkuaiyun.com/litianze99/article/details/52452521