git指令 创建仓库 上传项目 多人合作

Git初始化及仓库的创建和操作

一、基本信息设置

git config --global user.name 'xxx'
git config --global user.email "[email protected]"
git config --list            //查看当前配置

git指令 创建仓库 上传项目 多人合作_第1张图片

二、创建git仓库和初始化仓库
1、选择一个合适的地方,创建一个空目录

mkdir file          //mkdir创建文件夹
cd file		
pwd                //pwd命令用于显示当前目录。
git init

git init file     //上面4步可以写成这2步
cd file

2、向仓库添加文件。如:编写一个readme.txt文件

touch readme.txt               //touch 创建新的空文件
git add readme.txt             //添加到暂存区
git commit -m "提交描述"      //从暂存区添加到仓库

git status                           //查看状态
git add .                            //把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件
git add -u                        //提交被修改(modified)和被删除(deleted)文件,add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A                   //是git add . 和 git add -u两个功能的合集(git add --all的缩写)

如果你没有看到.git目录,那是因为这个目录默认是隐藏的,用ls -ah命令就可以看见。
在图形化界面ctrl+h就可以显示
(git status 查询仓库的状态. 显示当前工作目录状态)

git指令 创建仓库 上传项目 多人合作_第2张图片
3、修改仓库文件

vi readme.txt   

//使用vi加文件路径(或文件名)的模式打开文件,如果文件存在则打开现有文件,如果文件不存在则新建文件,并在终端最下面一行显示打开的是一个新文件。

cat readme.txt               //cat 命令用于连接文件并打印到标准输出设备上。 
xxxx输入内容
git add readme.txt             //添加到暂存区
git commit -m "提交描述"      //从暂存区添加到仓库

git status     
git diff                                    //不加参数即默认比较工作区与暂存区
git diff  --cached                    //比较暂存区与本地仓库区
git diff HEAD                         //比较工作目录与本地仓库区
git diff HEAD -- readme.txt  //可以查看工作区和版本库里面最新版本的区别

git指令 创建仓库 上传项目 多人合作_第3张图片

4、撤销修改
git指令 创建仓库 上传项目 多人合作_第4张图片

git checkout -b b master             //基于maser创建b分子
cat filename             					//查看工作区内容
git cat-file -p :filename        			//查看暂存区内容
git cat-file -p branch:filename       //查看某分支本地仓库内容

git ls-files -s                                 //查看暂存区有哪些文件
git ls-tree master                         //查看commit树有哪些文件
ll                                                  //查看工作目录有哪些文件

git revert
撤销 某次操作,此次操作之前和之后的commit和history都会保留,并且把这次撤销作为一次最新的提交。git revert是提交一个新的版本,将需要revert的版本的内容再反向修改回去,
版本会递增,不影响之前提交的内容

  git revert HEAD                  //撤销前一次 commit
   git revert HEAD^               //撤销前前一次 commit
   git revert commit             //(比如:fa042ce57ebbe5bb9c8db709f719cec2c58ee7ff)撤销指定的版本,撤销也会作为一次提交进行保存。
git checkout .或git checkout filename             //暂存区内容覆盖到工作区
git checkout  HEAD .或git checkout HEAD filename             //本地仓库内容覆盖到工作区和暂存区

场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时,用命令git checkout – file。

场景2:当你不但改乱了工作区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操作。

场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。

5、版本回退
git指令 创建仓库 上传项目 多人合作_第5张图片

git log       //查看历史记录 或git log --pretty=oneline 
git reset --hard HEAD^      //上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
git reset --hard 3628164

总结:
git reset --hard commit_id 版本的历史之间穿梭
穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。
要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。

6、删除仓库文件

rm  readme.txt
git rm readme.txt
git rm --cached                   //从缓存区移除
git commit -m "提交描述"
git status

7、GitHub 管理远程仓库

git clone 仓库地址        //将远程仓库(github 对应的项目复制到本地)
ll                       //查看当前文件夹下的文件有哪些
ls					  // //查看当前文件夹下的文件有哪些
touch a.php               
git add a.php             
git commit -m "提交描述"      
git push                   //本地仓库同步到git远程仓库中
git pull                    //远程仓库中添加的文件同步更新到本地

无法同步或没有权限,进行下面的操作

vi .git/congig

[remote "origin"]
	url = https://github.com/用户名、仓库名.git
修改为:
[remote "origin"]
	url = https://用户名:密码@github.com/用户名/仓库名.git

7 GitHub Pages 搭建网站
个人站点:

访问
https://用户名.github.io

搭建步骤:
1)创建个人站点 -> 创建仓库(注:仓库名必须是【用户名.github.io】)
2)在仓库下新建index.html的文件即可

GitHub Pages仅支持静态网页,仓库里面只能是html文件

Progect Pages项目站点

访问
https://用户名.github.io/仓库名

搭建步骤:
1)进入项目主页,点击settings
2) 在settings页面。点击【Launch automatic page generator】来自动生成主题页面
3)新建站点基础信息设置
4)选择主题
5)生成网页


由于你的本地Git仓库和GitHub仓库之间的传输是通过SSH加密的,所以,需要一点设置:
第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key

$ ssh-keygen -t rsa -C "[email protected]"

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:
然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容

本地Git仓库和远程仓库的创建及关联

1)github新建一个远程的仓库(空的)test

2)在本地创建一个本地的文件夹test

3)利用终端进入当前的文件夹目录 cd xxx/xxx

4)初始化这个本地的文件夹为一个Git可以管理的仓库 git init
注意:Git会自动为我们创建唯一一个master分支
我们能够发现在当前目录下多了一个.git的目录,这个目录是Git来跟踪管理版本库的,千万不要手动修改这个目录里面的文件,不然改乱了,就把Git仓库给破坏了。

5)将本地的仓库和远程的仓库进行关联
git remote add origin [email protected]:账户名/仓库名.git

git remote add origin https://github.com/sweetllh/test	 //关联
git pull origin master     			//拉取远程仓库的内容
					

6)在本地文件夹做事
1、新建文件 //touch main.m

2、将新建的main.m文件添加到仓库(这样git就会追踪这个文件) // git add main.m

3、把文件提交到仓库 // git commit -m “新建了一个man.m文件”

4、把本地库的内容推送到远程 // git push -u origin master

备注:origin:远程仓库名字; master:分支
注意:我们第一次push的时候,加上-u参数,Git就会把本地的master分支和远程的master分支进行关联起来,我们以后的push操作就不再需要加上-u参数了

5、我们用浏览器进入远程仓库中查看,发现远程仓库中也出现了mian.m文件

6、假如某天我们又对mian.m文件进行了修改(这里我们在main.m文件里面添加了一句"hello world")

7、我们可以利用git status查看状态 //git status

8、将文件添加到Git版本库,实际上就是把文件修改添加到暂存区 //git add main.m

9、提交修改,实际上就是把暂存区的所有内容提交到当前分支。 //git commit -m “添加了hello”

10、再次查看状态 //git status

11、把本地当前分支的最新修改推送至GitHub上的远程仓库 //git push origin master

12、利用浏览器在远程仓库查看,我们看到已经将本地上的修改推送到远程仓库了

13、git add . //添加所有文件

###将项目放到github上生成网页

git init
git add .
git commit -m '描述'                      //git commit --allow-empty -m  "允许空的提交”
git remote add origin [email protected]:账户名/仓库名.git
git push -u origin master

###将项目放到github上生成网页后需要修改
1、在github上创建项目
2、使用git clone https://github.com/xxxx/xxxxx.git克隆到本地
3、编辑项目
4、git add . (将改动添加到暂存区)
5、git commit -m"提交说明"
6、git push -u origin master 将本地更改推送到远程master分支
如果githubd的 remote上已经有了文件,会出现错误。此时应当先pull一下,即

git pull origin master

分支管理 :
1、创建分支:

git branch dev                //创建分支
git checkout dev              //切换分支
git checkout -b dev        // 相当于git branch dev   git chekout dev,创建和切换分支
git branch                 //命令查看当前分支
git log --oneline --decorate   //命令查看分支

修改文件
git add a.php
git commit -m 'branch test'
git checkout master         //dev的工作完成,切换回master分支
git merge dev               //把dev分支的工作成果合并到master分支上
git branch -d dev           //删除dev分支

2、分支冲突
当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

git log 查看提交历史记录
git log --oneline                 	 //或者 git log --pretty=oneline 以精简模式显示,只显示当前分支的
git log --oneline --all             //所有分支下的
git log --oneline --all --decorate   //所有分支下的,并显示分支
git log --oneline --all --decorate --graph   //图形化显示
git log --graph                   	 //以图形模式显示
git log --stat 						 //显示文件更改列表
git log --author= 'name'    	 //显示某个作者的日志
git log -p filepath           	  	//查看某个文件的详细修改
git log -L start,end:filepath   //查看某个文件某几行范围内的修改记录
git log --stat commitId    		//或者 git show --stat commitId 查看某一次提交的文件修改列表 
可以通过别名简化命令
git config alias.logg "log --oneline --all --decorate --graph"
git logg    //配置后可以代替git log --oneline --all --decorate --graph

3、分支管理策略

git merge dev   //当前分支与dev 分支合并
git merge --no-ff -m "merge with no-ff" dev    //用普通模式合并,合并后的历史有分支,能看出来曾经做过合并
git mergetool           //合并工具
git branch  -vv                      //跟踪分支

git rebase
git指令 创建仓库 上传项目 多人合作_第6张图片
git指令 创建仓库 上传项目 多人合作_第7张图片
git指令 创建仓库 上传项目 多人合作_第8张图片

git cherry-pick                 //git cherry-pick可以选择某一个分支中的一个或几个commit(s)来进行操作。例如,假设我们有个稳定版本的分支,叫v2.0,另外还有个开发版本的分支v3.0,我们不能直接把两个分支合并,这样会导致稳定版本混乱,但是又想增加一个v3.0中的功能到v2.0中,这里就可以使用cherry-pick了,其实也就是对已经存在的commit 进行再次提交.

4、bug分支
修复bug时,我们会通过创建新的bug分支进行修复,然后合并,最后删除;
当手头工作没有完成时,先把工作现场git stash一下,然后去修复bug,修复后,再git stash pop,回到工作现场。git stash pop,恢复的同时把stash内容也删了,还可以用git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除。

(1) stash当前修改

git stash               //会把所有未提交的修改(包括暂存的和非暂存的)都保存起来,用于后续恢复当前工作目录。比如下面的中间状态,通过git stash命令推送一个新的储藏,当前的工作目录就干净了。

实际应用中推荐给每个stash加一个message,用于记录版本,使用git stash save取代git stash命令。示例如下:

$ git stash save "test-cmd-stash"
Saved working directory and index state On autoswitch: test-cmd-stash
HEAD 现在位于 296e8d4 remove unnecessary postion reset in onResume function
$ git stash list
stash@{0}: On autoswitch: test-cmd-stash

(2)重新应用缓存的stash

git stash pop          //恢复之前缓存的工作目录,这个指令将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下。
git stash apply          //将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝。

(3)查看现有stash

$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
$ git stash show -p stash@{0}          //可以查看stash内容

(4)移除stash
可以使用git stash drop命令,后面可以跟着stash名字。下面是一个示例:

$ git stash list
stash@{0}: WIP on master: 049d078 added the index file
stash@{1}: WIP on master: c264051 Revert "added file_size"
stash@{2}: WIP on master: 21d80a5 added number to log
$ git stash drop stash@{0}
Dropped stash@{0} (364e91f3f268f0900bc3ee613f9f733e82aaed43)
git stash clear          //删除所有缓存的stash

5、远程分支
git fetch

git fetch origin master:tmp      //在本地新建一个temp分支,并将远程origin仓库的master分支代码下载到本地temp分支
git diff tmp                     //来比较本地代码与刚刚从远程下载下来的代码的区别
git merge tmp               //合并temp分支到本地的master分支
git branch -d temp        //如果不想保留temp分支 可以用这步删除

(1)如果直接使用git fetch,则步骤如下:
创建并更新本 地远程分支。即创建并更新origin/xxx 分支,拉取代码到origin/xxx分支上。
在FETCH_HEAD中设定当前分支-origin/当前分支对应,如直接到时候git merge就可以将origin/abc合并到abc分支上。
(2)git fetch origin
只是手动指定了要fetch的remote。在不指定分支时通常默认为master
(3)git fetch origin dev
指定远程remote和FETCH_HEAD,并且只拉取该分支的提交。

git pull
基于本地的FETCH_HEAD记录,比对本地的FETCH_HEAD记录与远程仓库的版本号,然后git fetch 获得当前指向的远程分支的后续版本的数据,然后再利用git merge将其与本地的当前分支合并。所以可以认为git pull是git fetch和git merge两个步骤的结合。

git pull <远程主机名> <远程分支名>:<本地分支名>
//取回远程主机某个分支的更新,再与本地的指定分支合并。

6、Feature分支
开发一个新feature,最好新建一个分支;
如果要丢弃一个没有被合并过的分支,可以通过git branch -D 强行删除。

7、多人协作

git remote -v    //查看远程库信息
git push origin master  //git push origin 推送分支
首先,可以试图用git push origin branch-name推送自己的修改;

如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;

如果合并有冲突,则解决冲突,并在本地提交;

没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!

如果git pull提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream branch-name origin/branch-name。

多人协作
a:

 git clone https://github.com/koffuxu/Embedded_Android_in_Chinese.git
 git push -u origin master

协作者b
1、把fork过来的项目clone到本地

git clone https://github.com/xugangfeng/Embedded_Android_in_Chinese.git

2、新建并切换到工作(dev)分支

	git brach dev
	git checkout dev 

3、把a的项目添加b的远程仓库

	git remote add upstream https://github.com/a/Embedded_Android_in_Chinese

4、把koffuxu的分支拿下来/

 git remote update

5、把a的maser分支更新到本地

6、合并a的分支到本地(其实第一次可以不需要)

git rebase upstream/master

b实现了一个功能,现在他要开始提交这个commit了。

	git add test.md
	git commit -m "modify from xugangfeng"
	git push -u origin dev



这时候,xugangfeng进入github网页,进入compare & pull request,填写一些信息,crete pull request即可 

你可能感兴趣的:(github)