Open chenxiaochun opened 6 years ago
先提交文件到本地暂存盘,然后再提交到本地仓库:
git add ./ git commit
或者只需要一条命令直接搞定:
git commit -am [message]
使用-am参数之前,建议一定要使用git status查看一下你当前文件的修改情况,看是不是所有的文件都需要被 commit,养成这个习惯很重要。因为本来分成两步的事情,可以让你在暂存区中进行一下确认。现在没有了这步确认,所以一定要使用git status查看一下。
-am
git status
此外,git add还可以指定参数来应对特定的情况:
git add
git add -u
git add .
git add -A
git add * -f
.gitignore
修改最近的一条 commit message
git commit --amend
git checkout -b [name]
git checkout -b 本地分支名 origin/远程分支名
git branch -m [newName]
git branch -l
git branch -r
git branch -vv
git branch -v
git remote show origin
master
git branch --merged
git branch --no-merged
git cherry-pick
git branch -D [branch_name]
git push origin :[branch_name]
git push origin -d <branch-name>
git branch -d `git branch --merged`
git remote prune origin
git branch -m <oldbranch-name> <newbranch-name>
git remote set-url origin [url]
git remote rm origin``git remote add origin [url]
git remote -v
这种情况一般发生在本地文件已经做了若干修改,但还没有提交到暂存盘。然后我想拉取一下远程仓库最新文件,结果因为某些文件和远程仓库造成冲突而无法拉取成功。这时你可以使用以下操作:
git stash git pull origin master git stash apply
第一步是将你修改过的文件先暂时贮藏起来(注意:和上面提到的暂存盘不是一回事儿),第二步是从远程仓库拉取最新的文件到本地,然后第三步是再将刚才贮藏的文件恢复出来。
三步操作完之后,最新文件已经拉取到本地,但是有可能和本地文件依然存在冲突。但此时你只要去解决每个文件的冲突即可。
这种情况一般发生在文件已经提交到本地仓库,但是往远程仓库推送时发生了冲突,可以使用以下操作:
git pull origin master --rebase git push origin master
先将远程操作仓库的提交记录拉到本地进行衍合,然后再次进行提交即可。
git reset [fileName]
commit
git revert
git checkout -- [fileName]
git checkout [branchName] -- [fileName]
git clean
-df
git reset --hard [origin/branchName]
git push origin master --force
先通过git log命令获取要恢复到的版本 hash 值,然后再用git reset恢复。--hard参数表示不会保留现在还未 stage 的修改:
git log
git reset
--hard
git reset [tree-ish] --hard
--soft参数表示会保留还未 stage 的修改:
--soft
git reset [tree-ish] --soft
git log --stat
git log -p
git log --grep [message]
git show [tree-ish]
git log -- pathname
git log --graph --decorate --oneline --simplify-by-decoration --all
git whatchanged
git shortlog -sn
git blame [filename]
git blame -L 10,11 README.md
git 默认情况下对文件名称是大小写不敏感的,例如,如果想将foo修改为Foo,并期望 git 能够识别出来,需要执行两步操作。首先,执行git mv foo tmp,将foo重命名为一个临时文件名;然后再执行git mv tmp Foo,将其命名为最终文件名即可。
foo
Foo
git mv foo tmp
git mv tmp Foo
git clone --recursive [url]
git submodule update --init --recursive
git submodule update --recursive --remote
git submodule add [url]
git submodule update
git config core.ignorecase false
git rm -rf --cached .
提交文件到本地仓库
先提交文件到本地暂存盘,然后再提交到本地仓库:
或者只需要一条命令直接搞定:
使用
-am
参数之前,建议一定要使用git status
查看一下你当前文件的修改情况,看是不是所有的文件都需要被 commit,养成这个习惯很重要。因为本来分成两步的事情,可以让你在暂存区中进行一下确认。现在没有了这步确认,所以一定要使用git status
查看一下。此外,
git add
还可以指定参数来应对特定的情况:git add -u
,将文件修改和文件删除添加到暂存盘git add .
或者git add -A
将文件修改、文件新建、文件删除添加到暂存盘git add * -f
将对文件的所有操作都添加到暂存盘,包括添加到.gitignore
中被忽略的文件修改最近的一条 commit message
分支操作
git checkout -b [name]
git checkout -b 本地分支名 origin/远程分支名
git branch -m [newName]
查看分支
git branch -l
git branch -r
git branch -vv
git branch -v
git remote show origin
master
分支:git branch --merged
master
分支:git branch --no-merged
合并分支
git cherry-pick
删除分支
git branch -D [branch_name]
git push origin :[branch_name]
、git push origin -d <branch-name>
清理分支
git remote prune origin
git branch -m <oldbranch-name> <newbranch-name>
仓库地址查看、修改
修改当前项目的远程仓库地址
git remote set-url origin [url]
git remote rm origin``git remote add origin [url]
git remote -v
拉取远程文件时,与本地文件发生了冲突:
这种情况一般发生在本地文件已经做了若干修改,但还没有提交到暂存盘。然后我想拉取一下远程仓库最新文件,结果因为某些文件和远程仓库造成冲突而无法拉取成功。这时你可以使用以下操作:
第一步是将你修改过的文件先暂时贮藏起来(注意:和上面提到的暂存盘不是一回事儿),第二步是从远程仓库拉取最新的文件到本地,然后第三步是再将刚才贮藏的文件恢复出来。
三步操作完之后,最新文件已经拉取到本地,但是有可能和本地文件依然存在冲突。但此时你只要去解决每个文件的冲突即可。
推送文件到远程仓库时,发生了冲突:
这种情况一般发生在文件已经提交到本地仓库,但是往远程仓库推送时发生了冲突,可以使用以下操作:
先将远程操作仓库的提交记录拉到本地进行衍合,然后再次进行提交即可。
文件版本恢复
git reset [fileName]
commit
操作,不会影响在这之前或者之后的commit
记录:git revert
git checkout -- [fileName]
git checkout [branchName] -- [fileName]
git clean
,加上-df
表示同时清除文件和文件夹git reset --hard [origin/branchName]
git push origin master --force
恢复当前项目到某一历史版本
先通过
git log
命令获取要恢复到的版本 hash 值,然后再用git reset
恢复。--hard
参数表示不会保留现在还未 stage 的修改:--soft
参数表示会保留还未 stage 的修改:查看修改历史
git log
,查看提交历史git log --stat
,查看每一次的提交都修改了哪些文件git log -p
,深入查看每一个文件的修改细节git log --grep [message]
,过滤查看提交日志git show [tree-ish]
,查看某一次提交的修改细节git log -- pathname
,查看指定目录/文件提交信息git log --graph --decorate --oneline --simplify-by-decoration --all
,查看所有分支的切换历史信息git whatchanged
,查看每一条提交记录的修改信息git shortlog -sn
,列出代码仓库的提交者统计信息git blame [filename]
,查看某一文件每一行的所有修改历史git blame -L 10,11 README.md
,查看指定行数的修改历史修改文件夹/文件名称操作
git 默认情况下对文件名称是大小写不敏感的,例如,如果想将
foo
修改为Foo
,并期望 git 能够识别出来,需要执行两步操作。首先,执行git mv foo tmp
,将foo
重命名为一个临时文件名;然后再执行git mv tmp Foo
,将其命名为最终文件名即可。git 子模块操作
git clone --recursive [url]
git submodule update --init --recursive
git submodule update --recursive --remote
git submodule add [url]
git submodule update
git 常用设置
git config core.ignorecase false
,忽略大小写.gitignore
中之后是不起作用的。解决办法就是在修改完.gitignore
之后,执行git rm -rf --cached .
命令即可