https://blog.csdn.net/crazyzhang1990/article/details/50413153
将本地文件上传到远程git服务器
1、(先进入项目文件夹)通过命令 gitinit 把这个目录变成git可以管理的仓库
git init
2、把文件添加到本地版本库中,使用命令git add 文件;添加到暂存区里面去,如果后面接小数点“.”,意为添加文件夹下的所有文件
git add .
3、用命令 git commit告诉Git,把文件提交到仓库。引号内为提交说明
git commit -m 'first commit'
4、关联到远程库
git remote add origin 你的远程库地址
如:
git remote add origin git@192.168.31.130:/srv/sample.git
如果上面步骤写错了:则
git remote rm origin //删除origin
git remote add origin git@git.oschina.net:yourname/demo.git //重新添加origin
5、获取远程库与本地同步合并(如果远程库不为空必须做这一步,否则后面的提交会失败)
git pull --rebase origin master
6、将最新的修改推送到远程仓库:gitpush -u origin master
备注:origin:远程仓库名字;master:分支
注意:我们第一次push的时候,加上-u参数,Git就会把本地的master分支和远程的master分支进行关联起来,我们以后的push操作就不再需要加上-u参数了
如果出现类似下面内容:
Username for 'https://github.com': shiren1118
Password for 'https://shiren1118@github.com':
To https://github.com/shiren1118/iOS_code_agile.git
![rejected] master -> master(non-fast-forward)
error: failed to push some refs to'https://github.com/shiren1118/iOS_code_agile.git'
hint: Updates were rejected because the tip of yourcurrent branch is behind
hint: its remote counterpart. Merge the remote changes(e.g. 'git pull')
hint: before pushing again.
hint: See the 'Note about fast-forwards' in 'git push--help' for details.
则输入命令:git push -u origin master –f即可搞定问题
CONFLICT(content):Merge conflict in XXXX/.DS_Store.
AutoMatic merge failed;fix conflicts and then commit the result.
意思是:
冲突内容:合并冲突在 XXXX.DS_Store文件中
自动合并失败;修改冲突然后提交修改后的结果。
git pull的时候:
![](https://img.haomeiwen.com/i2537311/3cbda57717719632.png)
自动合并失败,这个时候需要去代码中找到冲突的地方,然后分析原因去修改,合并失败的时候一般工程中会有错误提示,如图:
![](https://img.haomeiwen.com/i2537311/f0567d9dc0481ed9.png)
<<<<<<<< HEAD
你写的代码
===============
别人写的代码
sdhqd128dqwenasjdq
这种冲突首先先分析你们俩个的代码是实现相同功能而写的重复的代码还是各自实现的不同的功能的代码。如果是重复代码:两个二选一删除一个,然后再把这些冲突标示符删除即可;
如果不是重复代码,两个都需要保留,只把冲突符号(红色部分)删除即可。
工程编译通过之后就可以重新提交了,这个时候还需要从头执行:
修改完成后还是:
1.2.1 git add .
1.2.2 git commit -m “给你的保存起一个名字"
1.2.3 git pull 把服务器代码拉下来跟你本地代码合并
1.2.4 git push 把合并好的最新代码推送到服务器端
git是分为三部分,一部分是你自己的文件,另外一个是缓存区,最后一个是本地库。当你修改了自己的文件后,你会git add xx将修改保存到缓存区,然后再用commit推送修改到本地库中。
- 本地和远程的关系相当于两个分支,你感觉一样是因为你git pull 的时候已经自动给绑定好对应关系了, set-upstream..balbala
- 你远程新建了一个分支拉到本地的道理是一样的,属于复制了一份,但是本地分支和远程分支已经是两个东西了
- 本地分支属于本地仓库里,是包含关系,一个仓库里可以有很多分支, 如果是 tag 的话可以分离出独立的仓库
- 肯定不会全量推送到远程的,是通过对比 commit 的记录,如果本地高于远程就直接把多出来的commit 给怼上去,如果本地的这几个 commit 和远程的 commit 有冲突的部分就merge,然后根据提交时间排序再新建一个merge 的 commit 记录再怼上去
- 这个先 commit 再 pull 再 push 的情况就是为了应对多人合并开发的情况,
- commit 是为了告诉 git 我这次提交改了哪些东西,不然你只是改了但是 git 不知道你改了,也就无从判断比较;
- pull是为了本地 commit 和远程commit 的对比记录,git 是按照文件的行数操作进行对比的,如果同时操作了某文件的同一行那么就会产生冲突,git 也会把这个冲突给标记出来,这个时候就需要先把和你冲突的那个人拉过来问问保留谁的代码,然后在 git add && git commit && git pull 这三连,再次 pull 一次是为了防止再你们协商的时候另一个人给又提交了一版东西,如果真发生了那流程重复一遍,通常没有冲突的时候就直接给你合并了,不会把你的代码给覆盖掉
- 出现代码覆盖或者丢失的情况:比如A B两人的代码pull 时候的版本都是1,A在本地提交了2,3并且推送到远程了,B 进行修改的时候没有commit 操作,他先自己写了东西,然后 git pull 这个时候 B 本地版本已经到3了,B 在本地版本3的时候改了 A 写过的代码,再进行了git commit && git push 那么在远程版本中就是4,而且 A 的代码被覆盖了,所以说所有人都要先 commit 再 pull,不然真的会覆盖代码的
- 两个互相合并的唯一区别就是 A->B 的时候 B 分支上会产生一个 merge_commit 的信息,这个时候 B 是合并状态而 A 未合并状态,如果现在没有发生任何改动执行 B->A 就直接切换过去了,连 merge_commit 都不会生成了
网友评论