GIT(09)文件管理

介绍


  • 文件操作是日常中用的最多的开发技能。

分支文件状态(git status)


  • 查看分支下文件状态
git status
// 结果
On branch bthss_V3.0.4
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   ReleaseNote.txt

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        test.txt

no changes added to commit (use "git add" and/or "git commit -a")
  • 查看单个文件状态
git status <file>
git status test.txt
On branch bthss_V3.0.4
Untracked files:
  (use "git add <file>..." to include in what will be committed)

        test.txt

nothing added to commit but untracked files present (use "git add" to track)

提交文件


git add:添加文件到暂存区
git add // 默认添加所有
git add <file>  // 添加单个文件
git add -A  // 表示添加所有内容
git add . // 表示添加新文件和编辑过的文件不包括删除的文件
git add u // 表示添加编辑或者删除的文件,不包括新添加的文件
git add -A . // 一次添加所有改变的文件
git commit:提交文件到本地库
git commit
git commit <file>
git commit -m "message"  // -m 指定提交时的注释,上面两种会打开vim编辑器来编辑提交注释
git commit -a -m "massage" // -a 跳过git add添加到暂存区步骤就可以提交
git push:提交文件到远程仓库 (会将commited的文件都提交)
git push <远程主机名> <本地分支名><远程分支名>

// 例子:将本地的master分支推送到远程主机origin上的对应master分支, origin 是远程主机名,第一个master是本地分支名,第二个master是远程分支名。
git push origin master:refs/for/master  
// 远程分支被省略,将本地分支推送到与之存在追踪关系的远程分支(通常两者同名);如果该远程分支不存在,则会被新建
git push origin master 
// 省略本地分支名,则表示删除指定的远程分支;等同于推送一个空的本地分支到远程分支,等同于 git push origin --delete master
git push origin :refs/for/master 
// 本地分支和远程分支都省略,将当前分支推送到origin主机的对应分支;前提是本地分支和远程分支存在追踪关系
git push origin 
// 远程只有一个分支,可全省略;
git push 

撤销文件


git clean:撤销未追踪(untracked)状态
git clean -f  // untracked状态,撤销新增的文件
git clean -df // untracked状态,撤销新增的文件和文件夹
git checkout:撤销已修改,未暂存状态
git checkout  // 撤销项目下所有的修改
git checkout . // 撤销当前文件夹下所有的修改
git checkout xx/xx.txt xx/xx2.txt // 撤销某几个文件的修改
git reset:撤销已暂存,已提交状态
  • git reset mixed soft hard 三个重要参数
git reset
git reset --mixed // 与git reset等价,回到已修改状态,只保留源码,回退commit和add信息;即撤销本地仓库、暂存区,保留工作区
git reset --soft // 回到某个版本,修改的内容仍然在工作区和暂存区中;撤销的是本地仓库,保留的是工作区和暂存区
git reset --hard // 回到未修改状态,清空暂存区、工作区以及本地仓库
  • git reset 实际是回退到某一个commit版本,所以需要指定版本类的参数,不然没意义;
git reset --hard origin/master // 回退与本地远程仓库一致
git reset --hard HEAD^ // 回退到本地仓库上一个版本;同 HEAD~1
git reset --hard <commit_id> // 回退到任意版本
  • git reset 是完全回退到某个版本,之后的提交版本将丢失。这是和git revert有本质区别的。
git revert:功能类似git reset
  • 撤销是复制一个版本,将HEAD指向新的版本上。会产生一个新版本,原版本还存在
  • 会产生一次commit
git revert HEAD // 撤销前一次 commit
git revert HEAD^ // 撤销前前一次 commit

更新文件 (只能全量更新)


git pull:一步式获取更新
// 命令格式
git pull <远程主机名> <远程分支名>:<本地分支名>  
// 例如: 
git pull origin master:brantest

//省略本地分支,表示当前分支
git pull origin master

// 省略所有,表示对应远程分支,更新本地分支
git pull
git fetch + git merge:两步式获取更新
// git fetch 用法与 git pull 相同
git fetch
git merge <本地分支名>

移除文件:git rm


  • 删除暂存区和本地工作区文件
git rm <file>   // 配合 commit push 删除本地仓库和远程仓库
  • 删除暂存区,保留工作区,转成未追踪状态
git rm --cached  // 配合 commit push 删除本地仓库和远程仓库;

查看文件不同:git diff


git diff <file>  // 工作区与暂存区比较
git diff --cached <file>  // 显示暂存区和本地仓库的差异
git diff <branch-name1> <branch-name2> <file> // 比较2个分支之间的差异
git diff master origin/master <file> // 查看本地仓库与本地远程仓库的差异

查看文件提交日志:git log

git log  // 按提交时间列出所有的更新,最近的更新排在最上面
git log -p -2  // -p 显示内容差异, -2显示最近两次的提交

猜你喜欢

转载自blog.csdn.net/yanbin0830/article/details/88816663