git操作详解

http://www.ruanyifeng.com/blog/2015/12/git-workflow.html

个人小结:

gitHub: 163邮箱


Repository 版本库(也就是仓库)
新建一个file mkfile -n k +文件名

提交到本地
git add 修改的文件名
git commit -m “备忘信息”
git status 查看当前状态
git diff 查看修改内容

小插曲:
git add -A和 git add .   git add -u在功能上看似很相近,但还是存在一点差别
git add . :他会监控工作区的状态树,使用它会把工作时的所有变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。
git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)
git add -A :是上面两个功能的合集(git add --all的缩写)

# 删除 untracked files
git clean -f  

恢复某个已修改的文件(撤销未提交的修改):
$ git checkout file-name
例如:git checkout src/com/Android/.../xxx.Java
比如修改的都是java文件,不必一个个撤销,可以使用
$ git checkout *.java
撤销所有修改
$ git checkout .

git add 之后反悔,请用git reset HEAD



回退版本:
git reset --hard commit_id(注释:commit_id是你想要回退的版本,可以用git log查看提交历史)
回退到上个版本 git reset --hard HEAD^ 
(注释:HEAD代表当前版本,HEAD^代表上个版本,HEAD^^代表上上个本…)
git reflog 查看命令历史,以便确定要回到未来的哪个版本。用处:回退版本之后反悔。

 git 管理的是修改说明
1. 修改文件1 -> git 文件1 ->再次修改文件1 -> git commit -m “提交信息” ->git status 你会发现第二次修改并没有被提交 
2. 原因是git 只负责把add到缓存区的代码提交,并不会对没有add到缓存去的代码做提交
3. 解决办法是再次执行git add 修改文件1 ,然后再git commit -m “提交信息” 。就正常了。

撤销修改案例
在readme.txt中添加了一行,然后手动后悔删掉修改,然后分两种情况:
1. git add 了
2. 你没有git add
  git checkout -- readme.txt  结果:(丢弃掉工作区的修改)
1. 因为add了,文件被放到了缓存区,所以手动后悔删除不该写的话会回退到
2. 没add, 那就和添加一行修改前一模一样了

 注意 git checkout -- readme.txt  中 --如果没有,就变成切换分支了 。

也可这样做把add到缓存区的内容重新放回工作区:
git reset HEAD 加到缓存区的内容
然后执行 git checkout -- readme.txt 可以丢弃工作区的修改

网友提供的方法:
如果想反悔add到缓存区:git reset --mixed这样文件退出暂存区,但是修改保留, 然后git stash 即可忽略修改。哈哈。

删除文件
git rm test.txt  别忘了 git commit -m "删除testrm.txt"
git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。

 - - - - - -  - - - - - -以上都是基于本地的操作 -  - -  - - - — -  - - -  

创建SSH Key
ssh-keygen -t rsa -C “liuw_flexi@yo-ren.com”
在.ssh目录下找到id_rsa.pub公钥 上传到gitHub
/Users/liuwei/.ssh/id_rsa.pub

将本地代码库和远程仓库关联
git remote add origin git@github.com:nwgdegitHub/learngit.git
接下来就把本地内容推到远程去 git push -u origin master

新建分支 git checkout -b dev 
-b代表创建并切换
git branch查看所有分支和当前分支

切换分支  git checkout master

merge分支 git merge dev 代表把dev分支合并到当前所在的master分支

删除分支 git branch -d dev  一般用在合并之后不需要该分支了
git branch -D <name>强行删除 一般用在没有合并之前不想要该分支了,因为如果用git branch -d dev的话会出现还有分支未合并的提示。


- - - - - -- - - - - - - -- - - - - - - - --- - - - - - - 
- 解决冲突

新建分支feature1,在feature1分支中对ready.txt文件修改 一句话 Creating a new branch is quick AND simple.  之后提交
同样在 master分支 也修改 Creating a new branch is quick & simple. 

当合并git merge  feature1 时产生冲突 。

分别把feature1 和 master 中那句话改成一样的即可。就能成功merge了。


 - - - — - - —  — - - - — - - - - —————— - — - - - ——————— — - - - — 

在只有一个共同分支的基础上,如果是A同事改了和B同事同一处,B要推代码了,怎么办?
只能把待提交的内容隐藏,然后git pull , 再申请恢复修改了。

——————————————————————————————————————————


分支管理策略 强制禁用Fast forward模式 
 使用理由:Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息。
 --no-ff方式的git merge   会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息。
git merge --no-ff -m "merge with no-ff" dev

————————————————————————————————————
git stash  应用场景:工作只进行到一半,还没法提交,预计完成还需1天时间。但是接到一个bug修复任务,必须在两个小时内修复该bug。这时可以使用git stash 把当前工作现场“储藏”起来,等以后恢复现场后继续工作。
完成bug 修复之后回到之前自己的工作分支:git stash list 查看 
两种方式恢复:
1. git stash apply恢复,但是恢复后,stash内容并不删除,你需要用git stash drop来删除
2. git stash pop,恢复的同时把stash内容也删了

------------------------------------------
远程仓库的默认名称是origin
查看远程库的信息,用git remote
git remote -v显示更详细的信息

git push origin master 把本地master分支上的提交推送到远程库

多人协作:
首先,可以试图用git push origin branch-name推送自己的修改;
如果推送失败,则因为远程分支比你的本地更新,需要先用git pull试图合并;
如果合并有冲突,则解决冲突,并在本地提交;
没有冲突或者解决掉冲突后,再用git push origin branch-name推送就能成功!


———————————————————————————————————————————
Github - 一个网站,提供给用户空间创建git仓储,保存用户的一些数据文档或者代码等
GitLab - 基于Git的项目管理软件,GitLab 是一个用于仓库管理系统的开源项目。使用Git作为代码管理工具,并在此基础上搭建起来的web服务。

______________________________________________________________________________

打标签 git tag <name>

找到历史提交的commit id  : git log --pretty=oneline --abbrev-commit
对某次指定commit提交打标签 : git tag <tagname>  <commitId>
git tag -a v0.1 -m "version 0.1 released" 3628164这里的-a指定标签,-m 指定信息


A B都在Master修改
A推了内容
B第二天来没拉代码就进行了修改 
     有两种情况 B提交到了本地,这时git pull有问题,git push也会出问题。
                     B没提交到本地:B运行git pull的话会提示你说你本地修改没提交,如果修改了和远程有冲突的地方,git pull会自动merge把远程的覆盖本地修改,所以本地做的全没了。
          这时B是直接拉代码?

当git status 时,出现红色的
modified:   .DS_Store

这个是Mac 上打开关闭文件夹时的修改记录

如果在.gitignore 添加,不起作用的时候,可以试试

git rm --cached -- .DS_Store

然后再修改提交。
此文仅为鄙人学习笔记之用,朋友你来了,如有不明白或者建议又或者想给我指点一二,请私信我。liuw_flexi@163.com/QQ群:582039935. 我的gitHub: (学习代码都在gitHub) https://github.com/nwgdegitHub/
原文地址:https://www.cnblogs.com/liuw-flexi/p/6899411.html