Git 笔记

*git

廖雪峰 git 教程bash

 


git clone git地址app

git pull 拉取文件到本地gitlab

若是须要提交文件,先push测试

废弃某个加在了缓冲区的文件
git checkout -- aa.txtspa

------------- git添加一个文件 --
git add aa.txt.net

 

------------- git撤销本地全部未提交的更改 [有效]-------------------
1. git clean -df
2. git reset --hard
第一个命令只删除全部untracked的文件,若是文件已经被tracked, 修改过的文件不会被回退。
而第二个命令把tracked的文件revert到前一个版本,对于untracked的文件(好比编译的临时文件)都不会被删除。orm


====================
git push origin masterblog

gitk 能够打开可视窗口教程

================== 20170511 ============
1,新增长一个文件,修改从工做区添加到stage区
git add file1 [file2] [file3] 能够添加多个文件
2,git commit -m "你的备注"

git init 初始化仓库

git checkout -- filename, 舍弃这个文件的修改

git diff filename,查看文件修改的地方

修改文件后,提交时,依然两步走,add,commit
若是直接commit提交,会说 not staged for commit,意思是文件尚未准备好提交

git log --pretty=oneline 能够看提交记录

============== 版本回退 =========
当前版本是HEAD,前一个版本是HEAD^,再前一个版本是HEAD^^,往上100个版本是 HEAD~100
git reset --hard HEAD^,返回到上一个版本,开始一直出错,后来键盘改成大写 写HEAD^,就能够了

若是【git bash】窗口尚未关闭,上面用git log是看到了一长串id,例如 9c4102.....,
若是恢复到上面几个版本后,后悔了,能够从新找回来,例如 git reset --hard 9c4102,就这几位数字就能够,能惟一标识就行
a001,b002,c003,版本,从c一直还原到a,而后又想恢复到c版本,则能够用上面的 git reset --hard c003XX

若是【git bash】关闭了,例如次日开机来找,后悔了,又忘记了commit id,怎么办,git reflog
能够记录你每次的命令记录
==========
HEAD指向当前版本,git reset --hard commit_id 容许你在各个版本中来回穿梭
想回到过去,git log 看一下你想去过去哪一个版本
想回到将来,git reflog 看一些你想去当前时光轴日后(即将来)的 哪一个版本
==========

git diff HEAD filename 工做区和当前版本比较
============== 工做区,stage区,master
git checkout -- filename,修改尚未add到暂存区了,舍弃修改,(从工做区舍弃修改)
git reset HEAD filename,修改已经add到暂存区了,舍弃修改(从stage区舍弃stage状态,但还在工做区),
而后还辅以git checkout -- filename,让工做区的也舍弃修改,世界和谐了
==============
场景1:当你改乱了工做区某个文件的内容,想直接丢弃工做区的修改时,用命令git checkout -- filename。
场景2:当你不但改乱了工做区某个文件的内容,还添加到了暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD file,就回到了场景1,第二步按场景1操做。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,参考版本回退一节,不过前提是没有推送到远程库。
==============

提交的文件删除后,git检测到了
若是确实要删除,两个步骤:1,git rm 文件名,2,git commit -m "备注:删除了某个文件"
若是这个文件是误删,则 git checkout -- test.txt,(git checkout)实际上是用版本库中的版本替换工做区的版本,如论工做区修改或删除,均可以一键还原
---------------
远程仓库
git@192.168.0.60:luojq/learngit.git

一,本地先有了一个learngit的项目,而后push到远程仓库
1,在gitlab上面创建了一个learngit的项目,而后让本地与远程仓库关联
git remote add origin git@192.168.0.60:luojq/learngit.git
2,把本地推送给远程,-u是由于远程仓库如今是空的
git push -u origin master
3,之后本地提交,
git push origin master ?? origin/master
二,远程仓库先有了一个项目,而后clone到本地
git@192.168.0.60:archive/workprocess.git
git clone git@192.168.0.60:archive/workprocess.git
git@192.168.0.60:luojq/catAPI.git

========== 分支
新建一个分支dev,并切换到该分支上,【-b 表示建立并切换】
git checkout -b dev
至关于1,git branch dev, 2,git checkout dev

在分支上修改,而后切换到master上,合并分支的修改,步骤:
1,git checkout dev 切换到分支dev上,而后去修改东西,例如readme.txt
2,git checkout master ,切换回到主干
3,git merge dev,在主干上合并dev分支的修改【合并某分支到当前分支】
4,git branch -d dev ,dev完成了它的使命,删除该分支,这 过河拆桥啊

显示的好看一些
git log --graph --pretty=oneline --abbrev-commit

使用【强制禁用fast forward模式合并分支:--no-ff】
git merge --no-ff -m "merge with no-ff" devbranch


git stash 暂存
git stash list 查看
1,git stash apply [stash@{0}] 从新恢复[指定的stash,若是有多个]
2,git stash drop 删除暂存stash

1和2 能够合并为 git stash pop,恢复并删除
说明stash 是一个栈


git branch -D <分支名>,若是一个分支上的修改已经add,commit了,而后删除,会提示没有merge,此命令强制删除分支

============= 从远程仓库clone下来的项目 ==========
1,git remove -v 查看远程 抓取和推送的 具体信息
2,
git push origin master
git push origin <目的分支例如dev>

在本电脑的另外一个目录clone下远程仓库,
而后
想把远程的dev 建立到本地来,
git checkout -b dev origin/dev 出现问题,缘由是我clone前 以前的一个版本没有将dev分支 push 到远程仓库
因此先 1, git pull
2, git checkout -b dev origin/dev 就能够了

3,我在dev分支上,git push origin dev,将本地dev分支的更新push到远程dev分支上去了
共三步,add,commit,push

其余人在本身的dev分支修改后,提交到了远程的dev分支
你想把远程的dev更新 同步到 本地的dev分支上
1,git branch --set-upstream dev origin/dev (指定本地dev 与 远程dev 的连接)
2,git pull(仅这步是不行的)

===============================
所以,多人协做的工做模式一般是这样:

首先,能够试图用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。

这就是多人协做的工做模式,一旦熟悉了,就很是简单。
=============================================

标签

git tag v1.0
git log --pretty=oneline --abbrev-commit
git tab v0.9 6577556 ,有时候忘了给以前的打一下标签,能够git log 查看标签,而后 此处末尾的是commit_id

git show <tagname>

 =================

===================
工做的模式
1,git checkout xzg-ljq ,切换到本身的分支
2,git merge xzg 把xzg分支最新的东西拿下来,(仍是从远程拿??)
3,xzg-ljq分支修改后,commit,(若是须要push到远程xzg-ljq分支,git push origin xzg-ljq)

4,而后切换到xzg,git checkout xzg

5,而后本地 xzg 从本地 xzg-ljq分支merge东西,git merge xzg-ljq

6,开通了xzg push到远程的权限后,与其余同事一块儿合代码,push到远程origin xzg ,, 【git push origin xzg】


=========== 一次性添加全部文档 ==============
git add . :他会监控工做区的状态树,使用它会把工做时的全部变化提交到暂存区,包括文件内容修改(modified)以及新文件(new),但不包括被删除的文件。

git add -u :他仅监控已经被add的文件(即tracked file),他会将被修改的文件提交到暂存区。add -u 不会提交新文件(untracked file)。(git add --update的缩写)

git add -A :是上面两个功能的合集(git add --all的缩写)
===================
git push origin/xzg

git config user.name 查看当前git用户

==============================
若是想合并特定的提交到某一分支上
例如 xzg-ljq 某一次提交 想合并到 xzg分支上
76cada - 62ecb3 - b886a0 [xzg-ljq],如今xzg-ljq提交了三次

1,只想合并62ecb3 到xzg 上
git cherry-pick 76cada - 62ecb3

2,想合并某一分支的一系列commits,例如76cada - 62ecb3
能够基于xzg-ljq分支在新建一个分支,做为中间桥梁
git checkout newbranch 62ecb3 //62ecb3是那个系列的最后一个commit
git rebase --ontomaster 76cada^,(人家举例是合并到master上,那我这里难道ontoxzg-ljq??,待测试)

参考文章: 

Git合并特定commits 到另外一个分支

*

相关文章
相关标签/搜索