git 命令总结

git初期化,init之后默认的就是master分支
git init
将远程仓库克隆到本地,init与clone都可以建立初期本地仓库
git clone 
git需要先进入git要操作的工程目录
origin是url的一个别名即远程仓库网址
cd C:/workspace/core
.git文件夹是git的仓库文件夹
分支可以理解为一个文件的历史版本,切换分支就是切换到文件的某一版本。
随着
checkout切换分支文件的内容也会随着变化(git会调出当前分支的最新(head)版本)
察看本地分支
git branch
在某一个commit点上切出一个分支的
话,这两条线有一样的父节点所以之前的履历等信息完全一样。
察看远程分支,此处远程分支指的是已经下载到本地的远程分支,如果没有进行过fetch 或者pull则不会出现新的远程分支
git branch -r
察看所有分支
git branch -a
察看各个分支最后一次提交情况
git branch -v
如果
该分支又没有提交的commit则在该分支后面显示[ahead X]X为未提交的个数
查看分支的merge情况,例如,如果有3个分支没有被merge过那么切换到任何一个分支上执行该命令那么看另外2个分支都是没有被合并过的状态。
git branch --merged
git branch --no-merged
删除分支
git branch -D 分支名
合并当前分支与指定分支,如果两个分支中修改的文件有冲突,在该文件上会显示冲突
可以快进则以快进的方式merge
gi
t merge 分支名
<<<<<<< HEAD
aaa=aaaabbbbccccddd1
=======
aaa=aaaabbbbccccddd2
>>>>>>> test2
时执行git status会显示多一种状态即有冲突的文件Unmerged paths:
修改文件解决冲突后,需要再次add,commit到本地仓库

普通的merge
git merge --no-ff 分支名
快进merge
git merge --ff-only 分支名

快进merge,如果从a分支切出了b分支后a分支没有进行过提交,b进行了几次commit,则当把b分支git merge到a分支时执行的是快进merge
快进merge是将两个分支直接并成一条线,不会留下merge的履历,所以不能取消此次merge,也不能回到b分支上的某次commit
普通merge,如果a分支本身也有commit则无法进行快进merge只能将a,b进行merge 在commit,普通merge会保留a,b两条线。
merge之后如果没有冲突也会有一个默认的merge的commit
git rebase 合并两个分支
a分支切出了b分支,a,b各自有commit,b上的commit是1和2,使用rebase合并后,b分支上的cimmit1和2会被打包成1'和2',然后作
为新的commit提交到a分支上之后,a,b合并成一条线。之前的commit1和2则不存在了,已经进行过push的分支不能进行rebase否则无法在进行push,因为之前已经push到远程仓库上的commit1和2,在本地变成了1'和2',此时需要强制push。
Rebase也会使两个分支上merge的commit消失
创建分支(创建后仍在本地,未提交远程仓库),当前分支的所有状态都会被当作新分支的初始状态,如,在当前分支上有没有add到索引区的变更,那么在新分支test上也会看到该变更。该变更可以选择提交到元分支或新建分支上。无论提交到哪个分支上最后还是要merge到一起,提交到远程仓库。
git branch test
切换分支分支切换后,如果切换后分支有没有push的commit那么切换后会有提示
如果分支的切
换时发生了修改的冲突侧除非强制切换分支,否则会提示切换会导致修改被覆盖的提示,导致无法切换。
git checkout test
回到上一次切
换的分支是git checkout -
如果当前分支有修改未提交的修改会
导致无法切换分支,强制切换,
git checkout -f test
分支的创建与切换一起执行
 git checkout -b test2
察看当前分支下本地仓库的履历,包括远程仓库和本地commit后的履历,oneline是一行显示。
git log [--oneline]
408dfbc CN1
对应
aa557f7 ORACLE対応
察看最近两次提交的差分
git log -p -2
察看每次提交修改的文件
git log --stat
察看本地文件的状态
git status
态分为以下几种
Changes not staged for commit:
缓存中存在该文件,但是有变更没有被add到缓存中。
Changes to be committed:已
经add到缓存中但是没有被commit到本地仓库,执行commit后这部分变更会清空。
Untracked files:没有被add到
缓存区的文件
当一个文件被修改后,在本地任何一个分支上
执行git status都会显示该文件修改,
该修改被git add 之后Changes to be committed的状态只能在该分支下看到。
红色字显示的是没有进行add的文件,绿色自显示的是没有进行commit的文件。
一旦进行commit之后,status的状态会被清空,要想察看没有被push的文件
比较文件差异(工作区和缓存区的差异),这里是在缓存区没有被提交的差异,不是最近一次提交后所有的差异
git diff [文件路径] 不加路径的话显示所有文件差异
git diff --staged 缓存区最近一次提交于之前的差异,这个差异没有被提交到本地仓库,用于commit时确认要commit的内容,commit执行只后,之前git diff --staged里表示的差异会被清空。
忽略某些文件,如果有些文件如log编译文件等会自动发生变化,在执行status或diff时不想每次都出现这样的文件的话,可以忽略该文件。
cat .gitignore
*.[log]
提交文件
git add 文件路径
git add . Add所有
变更的文件
git commit -m [commont] 文件路径
git commit -m [commont] . 提交所有文件
如果在本地很多分支上作了文件的修改,
则commit时所在的分支决定了哪个分支上会显示履历
将本地文件提交到
远程仓库需要以下3步
workingtree(工作区)上执行add->index(缓存区)上执行commit->history(历史记录区/本地仓库)上执行 push->远程仓库
与之相应的可以撤销以上操作add 是用checkout撤销,commit是用reset撤销
提交文件有3种流程
1。用add 文件1文件2 文件3先将要提交的文件汇总到索引上变成准备提交的状态在执行一次commit将索引上准备提交的文件提交到本地仓库
2。用commit 文件1 文件2来指定索引上需要提交的文件
3。工作区的所有变更add 和commit同时执行 git commit -am "競合解決"
commit之后被合并的分支上所有的commit履历也都会跟着合并到当前分支上
 
 
 
 
 
 
HEAD最新的一次提交
head~1,head~2,head~3等,代表的是本分支上的commit履历,不包括其他分支合并
来的履历,(合并两个分支时被合并的分支上的commit履历也会一起合并过来),a,bmerge之后a上能看到b1-b3,但是a上的head不包括b1-b3
a0--a1--a2------a3
    |                    
|
   
b1------b2--b3
ORIG_HEAD服
务器上最新的一次提交
FETCH_HEAD
执行fetch后取下来的远程仓库的最新一次提交
MERGE_HEAD两个分支合并以后<branch-name>分支的最新一次提交git merge <branch-name>
 
 
git diff 显示工作目录与索引文件之间的差异
git diff 文件路径
显示工作目录中单个文件与索引区的差异
git diff --cached
显示索引文件与git仓库之间的差异
git diff HEAD
显示工作目录与git仓库之间的差异
git diff head --name-only只
显示文件名
git diff branch1 origin/branch1 比
较本地分支和远程分支区别

git status
显示当前branch状态
如果当前分支有没有push到远程仓库的commit则会显示
Your branch is ahead of 'origin/feature-EncryptComponent' by 5 commits.
git status各种状

Changes to be committed
经提交到索引区等待commit的文件(下面文件分为new file和modified)
Changes not staged for commit:
文件有改修没有被add到索引区
Untracked files:
规追加的文件没有被add到索引区

git log
显示当前分支所有commit履历
git show
显示一次commit提交的内容

察看head
当前分支中最新的一次提交叫做head,head同
时也指出了当前的位置,在哪一个分支上。
察看当前分支已
经commit到本地仓库但是没有被push到远程的变更
git show [head]
察看最新倒数第二次的提交
git show head^
察看最新倒数第三次的提交
git show head^^或者git show head~2
察看指定的commit
git show commitid
查看所有分支的commit情况,可以看到每次提交都是在那个分支上进行的,!表示所在分支的head,*表示当前分支,-是merge,+普通的commit
git show-branch
! [develop] XXX修正 #111
 
! [feature-#229] reset the value
 
! [master] XXX修正 #111
  
* [test] new function
   
! [test2] hotfix
-----
   * 
[test] new function
   
+ [test2] hotfix
 +   
[feature-#229] reset the value
 
+ *+ [test^] 作成
 
+ *+ [test~2] 追加
 
+ *+ [test~3] 修正
 
+ *+ [test~4] 修正212
 
+ *+ [test~5] 修正212
 
+ *+ [test~6] 修正
 
+ *+ [test~7] 修正 #212
 
+ *+ [test~8] 修正 #212
 
+ *+ [test~9] XX完了
+++*+ [develop] XXX修正 #111
 
 
tracking branch 为了追踪远程分支在本地建立的分支
remote branch
远程分支
local branch 本地分支
git fetch [origin]
远程他人分支反映到本地的跟踪分支上,包括更新已经有的分支和下载新的分支
    3036acc..9eb5e40 
debian-release-20081030 -> origin/debian-release-20081030
  * [new branch]     debian-release-20081112 -> origin/debian-release-20081112
git merge [origin/debian-release-20081112]
将本地的跟踪分支合并到本地分支上
再用checkout debian-release-20081112进入这个新分支,执行过checkout后才能在branch命令中看到新分支
 
或者在fetch之后,在本地建立同名分支,进入该分支之后再进行merge
本地建立同名分支develop,由于没有merge所以develop分支履
历与master一致
git branch -v
* develop 87381ae 依存注入
  master 
87381ae 依存注入
merge之后develop的履
历变成了远程分支的履历
git branch -v
* develop 0e55fc3 ORACLE
对应
 master 87381ae 依存注入
用pull操作来更新远程分支,相当于fetch与merge在一起执行
git pull origin master
git checkout develop
git branch -v
* develop 0e55fc3 ORACLE
对应
 master 
87381ae 依存注入
develop分支已经是远程分支的履历
 
git revert commitid
为了取消某次commit的commit
rebase -i
git reset --hard commitid
完全恢复到某次commitid
时的状态

如果有其他分支branchother是从当前分支的head切出来的场合,当当前分支reset 历史履历的某一点后其他分支的履历不发生变化,即当前分支后退了,branchother还保持着以前的状态。

git reset --hard

撤消本地的操作,

git reset --hard commitid
销一次提交,完全删除一次提交,该提交的变更从本地仓库,索引区,工作目录完全删除。
Git rest --soft commitid
销一次提交,只是从本地仓库撤销,索引区和工作目录保留,针对该提交的变更进行编辑可以再次进行提交。
Git reset commitid
销一次提交,从本地仓库和,索引区撤销,保留工作区。
git checkout -- file
销某个文件的修改,恢复到仓库或者索引区的状态。
将本地分支推送到远程仓库
git push origin test
删除远程分支
git push origin :test
提交本地test分支作
为远程的master分支
git push origin test:master
 
察看改修进程的履历,依次为worktree变化,索引区变化,本地仓库变化
git status,   git diff,   git diff --cached,   git show head
如果想撤销已经推送到远程的分支上的一些commit,可以先删除远程分支,在回退本地分支版本,在从新把本地分支推送到远程。
Git push origin :branch
git reset --hard commitid
 
这一步不会将已经推送到远程的分支回退所以要先删除远程在重新推送。
git push origin branch
 
修改上一次,提交时的commant
git commit --amend
进入vim编辑器 然后连打两个大写Z推出编辑器。
 
 
例子
本来应该在develop上切分支feature2进行新作业,吴操作从另外一个feature1上切了分支,而f1上有没有merge到develop上的变更,这样就带到了f2上,而将f2进行merge时不应该有这些f1上的变更,并且pullrequest时也将f1的变更显示了出来。
解决:让f1线进行merge到develop,f2在本地更新develop再将这些更新merge到f2上,这样f1变更的新版本文件就会覆盖到f2上,并且不会冲突,因为develop上的新版本的父节点和f2一致。在将f2push到远程这样远程的f2就不会显示f1的更新。
撤销远程push,先reset本地到一个历史commit id,在强制push到远程,git push -f origin feature-test
更新develop后再merge到作业分支,如果没有净合的话在工作分支上则会有一个自动merge的commit,如果有净合则需要解决净合后手动进行commit。
此时只要有一个文件有净合,其他所有从develop merge过来的文件都需要手动commit。
 
 
git remote -v 

察看远程url

-----------------------

git stash
更新前把更改的文件先退避,以免发生冲突.新规的文件不会被退避.每个不同分支分别保存.只能保存变更文件,新追加文件无法保存,会随着切换分支,带到其他分支.如果不想带入到别的分支,只能本地保存.
一次性删除新追加文件.
git clean -f
强制切换分支,也撤消了更新的文件.
git checkout -f 

git stash pop
更新后把退避的文件返回.


git gui
调出git gui图形界面


查看树行结构,

gitk

查看某个文件的树型历史.

gitk XXX

git branch -r 看到的只是下载到本地的远程分支,要看所有远程分支先要git fetch一下

-------------------------

撤回已经push的提交revert 要撤回的hashID 撤回之后需要再进行一次push,push的是本次撤回的这个操作动作

-------------------------

git stash
git checkout develop
git pull --rebase origin develop
git checkout -
git merge develop
git push origin feature_XXX
git stash pop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值