git学习
关于diff -u
diff -u old new
注意顺序,新与旧对比,-是少了什么, +是多了什么
也可以理解成-是旧,+是新
@@ -1,7 +1,7 @@
中
-,+意义同上
a,b表示从第a行开始的b行
划分版本原则
两个基本无联系的改动,应分两次git
一次性开到了三个错,应一次全改完再git
相邻两次git,不宜过久,不宜过短
git repository(仓库)
将有一定关联性的文件(改一个另外一个也和可能改这种)放一起
里面的文件会一起git
git log(日志,记录)
列出commit记录 (越靠上越新) (最新的commit会被标为HEAD)
一开始只能显示部分(长度限制)
上下箭头一行行移(网上的话只能到一开始长度限制的那个位置)
pageup pagedown可以大段大段移
按q退出log
--all
会显示完整的图, 否则只能显示从当前checkout点往祖先边走能够到达的地方
--graph
会画分支图,注意分支点不一定是commit点,只是图不好画。*
才是commit点
--oneline
会使commit显示更简便,一行一个
--stat
会显示修改了哪些文件+了多少处,-了多少处
--grep xxx
可以搜索messagel里的内容(不能是日期什么的)
git log folder/
搜索该文件夹内的
git log -- file
搜索该文件的
git log branch --
搜索该分支的
git clone(复制)
git clone <url>
git config(配置)
git config --global color.ui auto
获得彩色的 diff 输出
git config --global user.name "yourname"
设置author
参考了1 2优化了一下log显示方式
可能有缺陷吧,暂时先这样,以后有问题再说
配置文件存放在~/.gitconfig
[alias]
lg = log --graph --abbrev-commit --decorate --date=format:'%Y-%m-%d %H:%M:%S' --format=format:'%C(bold black)%h%C(reset) - %C(bold cyan)%ad%C(reset) %C(dim white)- %an%C(reset) %C(bold yellow)%d%C(reset)%n'' %C(white)%s%C(reset) ' -10 --all
git checkout
去到其他版本(这时HEAD会到其他地方
撤销:
1)部分。 git checkout -- file或dir
2) 完整。 git reset --hard HEAD
git init
在目录下输git init
生成.git
需要ls -a
才能看到
init后没有进行commit
没有加入staging area
所有文件属于untracked files
手贱在不想建git的地方init了的话,删除目录下.git
文件夹即可
git status
未跟踪过的文件untracked files
修改后未载入缓存changes no staged for commit
载入缓存而未commit显示changes to be commited
git add
git add <file>
将文件载入缓存
如果修改后add后又对已经add的文件进行了修改
那么该文件会既出现在not staged for commit又出现在changes to be committed
因为add进去后,再修改原文件,是不会改变stage里的那个的
git diff(比较)
git diff
比较显示方式同diff -u
working directory -> staging area -> repository
1)git diff ID1 ID2
比较两个commit ID(这里ID不一定要完整,只打头几位能分辩即可)
2)git diff
比较working directory和staging area
3)git diff --staged
比较staging area和latest commit
4)git diff ID
比较working directory和commit ID
git commit(提交)
git commit -m "message"
右分号未打之前,可换行些message
message样式指南
git branch
git branch
查看分支状态
git branch name
新建分支
git checkout branchname
移到某个分支的末尾(就像master标记,分支的标记再各分支的末尾)
git checkout -b name
新建分支并移过去
git log --graph
会显示分支图
git branch -D name
删除分支(已merge则只删标签,未merge则删整个分支(真要这么做时先把head移开,否则会游离))
另外如果在一条链的中间节点上修改然后commit,他会出去一个假分支,你checkout到其它地方他就没了
git merge
git checkout branch1
+ git merge <branch2> (<branch345...>)
可将branch1和其他分支合并,并延长branch1分支至合并点,其他branch名称保留原位
如果合并出错冲突git reset --merge
git push
github建空repository。clone那里获得地址
git remote add origin url
git push -u origin master
已有要修改则
git remote remove origin
修改commit message
git commit --amend
修改最近一次commit。 ^X y enter保存
git不小心commit了大文件且commit了多次,而那个大文件没啥用可以删那种
git filter-branch --index-filter 'git rm --cached --ignore-unmatch <your-file-name>'
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git fsck --full --unreachable
git repack -A -d
git gc --aggressive --prune=now
git push --force origin master
git 在 vs中使用注意事项
设项目名为A
需要.gitignore
.vs/
用户配置文件夹后面得加/
记得
A/.vs
用户配置(如上一次关闭时在哪里之类的
A/x64
debug文件
这些文件都是随时可删不影响别人用vs打开的
但如果不删掉,git就push不了